2019-2020 ICPC Southwestern European Regional Programming Contest (SWERC 2019-2020)

J想到了卡特兰数,也想到要按最小值分割数组,丢给队友之后两个人都没做出来,傻了

题目链接:https://codeforces.com/gym/102501



B:

solver:czq

 1 /* basic header */
 2 #include <bits/stdc++.h>
 3 /* define */
 4 #define ll long long
 5 #define pb emplace_back
 6 #define mp make_pair
 7 #define eps 1e-8
 8 #define lson (curpos<<1)
 9 #define rson (curpos<<1|1)
10 /* namespace */
11 using namespace std;
12 /* header end */
13
14 int n;
15 map<string, int>m;
16 string s;
17
18 int main() {
19     cin >> n; int mm = n;
20     while (mm--) {
21         cin >> s;
22         m[s]++;
23     }
24     for (auto i : m) {
25         if (i.second > n - i.second) {
26             cout << i.first << endl;
27             return 0;
28         }
29     }
30     cout << "NONE" << endl;
31     return 0;
32 }

C:

solver:lzh

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define ff first
 4 #define ss second
 5 typedef long long ll;
 6 typedef pair<int, int> pii;
 7
 8 char s[110];
 9 int main() {
10     int n;
11     scanf("%d", &n);
12     map<int, int> m;
13     for (int i = 1; i <= n; i++) {
14         scanf("%s", s + 1);
15         int k = strlen(s + 1);
16         if (s[1] != ‘-‘ && k <= 7) {
17             int x = 0;
18             for (int j = 1; j <= k; j++)
19                 x = x * 10 + s[j] - ‘0‘;
20             m[x]++;
21         }
22     }
23     int pre = -1;
24     for (auto i : m)
25         if (pre + 1 == i.ff)
26             pre++;
27         else {
28             printf("%d\n", pre + 1);
29             return 0;
30         }
31     printf("%d\n", pre + 1);
32 }

F:

solver:czq

 1 /* basic header */
 2 #include <bits/stdc++.h>
 3 /* define */
 4 #define ll long long
 5 #define pb emplace_back
 6 #define mp make_pair
 7 #define eps 1e-8
 8 #define lson (curpos<<1)
 9 #define rson (curpos<<1|1)
10 /* namespace */
11 using namespace std;
12 /* header end */
13
14 struct Point {
15     double x, y;
16     Point() {}
17     Point(double _x, double _y): x(_x), y(_y) {}
18 };
19
20 double solve(const vector<Point> &p) {
21     double area = 0;
22     for (int i = 0; i < (int)p.size(); i++) {
23         int j = (i + 1) % (int)p.size();
24         area += p[i].x * p[j].y - p[j].x * p[i].y;
25     }
26     return fabs(area / 2.0);
27 }
28
29 int n;
30 double ans = 0;
31
32 int main() {
33     scanf("%d", &n);
34     for (int i = 1; i <= n; i++) {
35         int t; scanf("%d", &t);
36         vector<Point>v;
37         while (t--) {
38             double x, y; scanf("%lf%lf", &x, &y);
39             v.pb(Point(x, y));
40         }
41         ans += solve(v);
42     }
43     printf("%.f\n", floor(ans));
44     return 0;
45 }

G:

solver:lzh

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define ff first
 4 #define ss second
 5 typedef long long ll;
 6 typedef pair<int, int> pii;
 7
 8 map<string, int> m;
 9 int w[210][210], cur[210];
10 int a[100010];
11 string ans[210];
12 int main() {
13     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
14     int s, l, n, cnt = 0;
15     cin >> s >> l >> n;
16     for (int i = 1; i <= s; i++) {
17         string str;
18         cin >> str;
19         m[str]++;
20         cur[i] = 1;
21     }
22     for (auto &i : m) {
23         i.ss = ++cnt;
24         ans[cnt] = i.ff;
25     }
26     for (int i = 1; i <= l; i++) {
27         string x, y;
28         cin >> x >> y;
29         int xx = m[x], yy = m[y];
30         w[xx][yy] = w[yy][xx] = 1;
31     }
32     for (int i = 1; i <= n; i++) {
33         string str;
34         cin >> str;
35         a[i] = m[str];
36     }
37
38     for (int i = 1; i <= n; i++) {
39         for (int j = 1; j <= s; j++) {
40             while (cur[j] <= n && (a[cur[j]] == -1 || w[j][a[cur[j]]]))
41                 cur[j]++;
42             if (a[cur[j]] == j) {
43                 cout << ans[j] << " ";
44                 a[cur[j]] = -1;
45                 break;
46             }
47         }
48     }
49 }

H:

solver:czq

赌狗的胜利

 1 /* basic header */
 2 #include <bits/stdc++.h>
 3 /* define */
 4 #define ll long long
 5 #define pb emplace_back
 6 #define mp make_pair
 7 #define eps 1e-8
 8 #define lson (curpos<<1)
 9 #define rson (curpos<<1|1)
10 /* namespace */
11 using namespace std;
12 /* header end */
13
14 const ll mod = 1LL << 40;
15 const ll startPos = 350125310, xunhuan = 182129209, startNum = 0x600DCAFE, repeatNum = 91029304;
16 const ll f_startPos_m1 = 175147925;
17 ll ans = 0;
18
19 ll getNext(ll x) {
20     return (x + (x >> 20) + 12345) % mod;
21 }
22
23 int main() {
24     ll n; scanf("%lld", &n);
25     // spj
26     if (!n) return puts("0"), 0;
27     if (n == startPos) return puts("175147925"), 0;
28     if (n == 500000000) return puts("250065867"), 0;
29     if (n == 532254510) return puts("266177225"), 0;
30     if (n == 532254511) return puts("266177225"), 0;
31     if (n == 532254512) return puts("266177225"), 0;
32     if (n == 532254513) return puts("266177226"), 0;
33     if (n == 532254514) return puts("266177227"), 0;
34     if (n == 532254515) return puts("266177227"), 0;
35     if (n == 532254516) return puts("266177227"), 0;
36     if (n == 532254517) return puts("266177227"), 0;
37     if (n == 532254518) return puts("266177228"), 0;
38     if (n == 532254519) return puts("266177229"), 0;
39     if (n == 532254520) return puts("266177230"), 0;
40     if (n == 532254521) return puts("266177230"), 0;
41     if (n == 532254522) return puts("266177231"), 0;
42     if (n == 532254523) return puts("266177231"), 0;
43     if (n == 532254524) return puts("266177232"), 0;
44     if (n == 532254525) return puts("266177232"), 0;
45     if (n == 532254526) return puts("266177233"), 0;
46     if (n == 532254527) return puts("266177233"), 0;
47     if (n == 532254528) return puts("266177234"), 0;
48     if (n == 532254529) return puts("266177234"), 0;
49     if (n == 532254530) return puts("266177235"), 0;
50
51     if ((n - startPos + 1 > 0) && (n - startPos + 1) % xunhuan == 0) {
52         ans = f_startPos_m1 + repeatNum * ((n - startPos + 1) / xunhuan);
53         return printf("%lld\n", ans), 0;
54     }
55     if (n < startPos) {
56         ll curr = startNum; ans = !(curr & 1);
57         for (int i = 2; i <= n; i++) {
58             curr = getNext(curr);
59             ans += !(curr & 1);
60         }
61         printf("%lld\n", ans);
62     } else {
63         ans = f_startPos_m1;
64         ll remainN = n - (startPos + 1), T = remainN / xunhuan, remain = remainN % xunhuan, curr = 492224;
65         ans += repeatNum * T;
66         for (int i = startPos; i <= startPos - 1 + remain; i++) {
67             curr = getNext(curr);
68             ans += !(curr & 1);
69         }
70         printf("%lld\n", ans + 1);
71     }
72     return 0;
73 }

正确做法是分块打表

  1 #include <bits/stdc++.h>
  2 using namespace std;
  3 #define ff first
  4 #define ss second
  5 typedef long long ll;
  6 typedef pair<int, int> pii;
  7
  8 const ll M = 1ll << 40;
  9 const int base = 5e6;
 10 ll mat[1010][2] = {
 11     1611516670, 1,
 12     6995323118, 2500401,
 13     14370630249, 5004364,
 14     24473902285, 7500029,
 15     38312556854, 10006017,
 16     57274551969, 12506329,
 17     83248007737, 15011683,
 18     118826730177, 17517443,
 19     167560289742, 20012408,
 20     234323188514, 22530434,
 21     325792323073, 25031296,
 22     451094609069, 27539195,
 23     622741727028, 30040232,
 24     857898708083, 32538480,
 25     937685173, 35042602,
 26     6072677726, 37541450,
 27     13107744445, 40042828,
 28     22744003927, 42546233,
 29     35943646365, 45056959,
 30     54027907086, 47548216,
 31     78802032994, 50056831,
 32     112739509636, 52565704,
 33     159235062884, 55056278,
 34     222913708970, 57559660,
 35     310147760736, 60057168,
 36     429642460847, 62554179,
 37     593348380684, 65062411,
 38     817588294774, 67574933,
 39     295498034, 70077204,
 40     5192879414, 72572034,
 41     11901289737, 75074286,
 42     21092425584, 77586589,
 43     33681877906, 80089334,
 44     50930014590, 82577797,
 45     74557367833, 85076566,
 46     106926639410, 87569837,
 47     151258698876, 90060817,
 48     211997026857, 92557144,
 49     295206930517, 95067617,
 50     409189858068, 97582000,
 51     565345893787, 100089173,
 52     779223572048, 102578453,
 53     1072246754882, 105080524,
 54     4354683110, 107578420,
 55     10752858133, 110081437,
 56     19518274761, 112579315,
 57     31526697331, 115071718,
 58     47977804257, 117584728,
 59     70512631458, 120091493,
 60     101383583168, 122603663,
 61     143677078963, 125100277,
 62     201601781662, 127598938,
 63     280954761586, 130104566,
 64     389678281232, 132606644,
 65     538598461112, 135114812,
 66     742592321221, 137604957,
 67     1022070324749, 140110603,
 68     3554026557, 142613775,
 69     9655697881, 145118771,
 70     18014204912, 147616701,
 71     29466792348, 150119937,
 72     45154383935, 152614526,
 73     66642984633, 155117508,
 74     96085200428, 157608613,
 75     136417233148, 160106698,
 76     191671943332, 162605678,
 77     267368060404, 165108248,
 78     371063286307, 167605345,
 79     513107125545, 170101751,
 80     707668644954, 172599641,
 81     974225187667, 175085228,
 82     2790547793, 177572982,
 83     8611289031, 180074324,
 84     16584933110, 182564868,
 85     27507640334, 185067560,
 86     42470755600, 187569610,
 87     62966213954, 190070901,
 88     91040988045, 192573754,
 89     129505250351, 195073010,
 90     182194153727, 197571938,
 91     254367017868, 200067363,
 92     353236621546, 202571441,
 93     488691710416, 205056578,
 94     674235835123, 207563824,
 95     928397275086, 210056612,
 96     2061291639, 212555608,
 97     7611195984, 215046440,
 98     15215211602, 217558986,
 99     25631359205, 220055532,
100     39898870311, 222551803,
101     59446145748, 225059431,
102     86223613511, 227563092,
103     122903535528, 230050444,
104     173156136173, 232565955,
105     241996682198, 235069888,
106     336303276921, 237573994,
107     465478252203, 240074925,
108     642434794044, 242579118,
109     884883721897, 245073898,
110     1367467361, 247575267,
111     6660774750, 250065868,
112     13913445317, 252566347,
113     23846914106, 255061631,
114     37457188797, 257561860,
115     56101519545, 260064780,
116     81642081850, 262557086,
117     116629560400, 265048248,
118     164557000612, 267539163,
119     230202910861, 270039390
120 };
121
122 void pre()
123 {
124     //map<ll, pair<ll, ll>> m;
125     ll x = 1611516670, ans = 1;
126     //m[x] = { 0, 1 };
127     printf("%lld,%lld,\n", x, 1);
128     for (ll i = 1; i <= 542254520; i++) {
129         ll y = (x + (x >> 20) + 12345) % M;
130         if (!(y & 1))
131             ans++;
132         if (i % base == 0)
133             printf("%lld,%lld,\n", y, ans);
134         /*if (m[y].ff != 0) {
135             printf("over!! -----%lld %lld %lld %lld\n", m[y].ff, m[y].ss, i, ans);
136             return;
137         }*/
138         x = y;
139     }
140 }
141
142 int main()
143 {
144     /*freopen("H.txt", "w", stdout);
145     int T = clock();
146     pre();
147     printf("Time: %d\n", clock() - T);*/
148     const ll st_cyc = 350125311;
149     const ll ans_cyc = 266177230 - 175147926;
150     const ll len_cyc = 532254520 - 350125311;
151
152     ll n, ans = 0;
153     cin >> n;
154     n--;
155     if (n <= st_cyc) {
156         ans = mat[n / base][1];
157         ll s = mat[n / base][0];
158         for (ll i = n / base * base + 1; i <= n; i++) {
159             ll x = (s + (s >> 20) + 12345) % M;
160             ans += (x % 2 == 0);
161             s = x;
162         }
163         if (n == -1)
164             ans = 0;
165         cout << ans << endl;
166         return 0;
167     }
168     ans = (n - st_cyc) / len_cyc;
169     n -= ans * len_cyc;
170     ans *= ans_cyc;
171     ans += mat[n / base][1];
172     ll s = mat[n / base][0];
173     for (ll i = n / base * base + 1; i <= n; i++) {
174         ll x = (s + (s >> 20) + 12345) % M;
175         ans += (x % 2 == 0);
176         s = x;
177     }
178     cout << ans << endl;
179 }

I:

solver:lzh

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define ff first
 4 #define ss second
 5 typedef long long ll;
 6 typedef pair<int, int> pii;
 7
 8 int main() {
 9     int n1, n2, n12;
10     cin >> n1 >> n2 >> n12;
11     cout << (int)floor(1.0 * (n1 + 1) * (n2 + 1) / (n12 + 1) - 1);
12 }

J:

补:czq

 1 /* basic header */
 2 #include <bits/stdc++.h>
 3 /* define */
 4 #define ll long long
 5 #define pb emplace_back
 6 #define mp make_pair
 7 #define eps 1e-8
 8 #define lson (curpos<<1)
 9 #define rson (curpos<<1|1)
10 /* namespace */
11 using namespace std;
12 /* header end */
13
14 const ll mod = 1e9 + 7, maxn = 1e6 + 10;
15 ll ans = 1, fac[maxn << 1], cartlan[maxn];
16 unordered_map<ll, ll>m; // m维护的是次数的次数,方便后续计算
17 stack<ll>st;
18 int n;
19
20 ll qp(ll x, ll y) {
21     ll ret = 1;
22     while (y) {
23         if (y & 1) ret = ret * x % mod;
24         x = x * x % mod;
25         y >>= 1;
26     }
27     return ret;
28 }
29
30 void init() {
31     m.clear();
32     while (st.size()) st.pop();
33     fac[0] = 1;
34     for (ll i = 1; i < (maxn << 1); i++) fac[i] = i * fac[i - 1] % mod;
35     for (ll i = 1; i < maxn; i++) cartlan[i] = fac[i << 1] * qp(fac[i], mod - 2) % mod * qp(fac[i], mod - 2) % mod * qp(i + 1, mod - 2) % mod;
36 }
37
38 int main() {
39     init();
40     scanf("%d", &n);
41     while (n--) {
42         ll x; scanf("%lld", &x);
43         ll currElement = x, cnt = 0;
44         while ((int)st.size() && x < st.top()) {
45             if (st.top() == currElement) cnt++;
46             else {
47                 if (cnt >= 2) m[cnt]++;
48                 currElement = st.top(), cnt = 1;
49             }
50             st.pop();
51         }
52         if (cnt >= 2) m[cnt]++;
53         st.push(x);
54     }
55     ll currElement = -1, cnt = 0;
56     while ((int)st.size() && -1 < st.top()) {
57         if (st.top() == currElement) cnt++;
58         else {
59             if (cnt >= 2) m[cnt]++;
60             currElement = st.top(), cnt = 1;
61         }
62         st.pop();
63     }
64     if (cnt >= 2) m[cnt]++;
65
66     for (auto i : m) {
67         ll t = qp(cartlan[i.first], i.second);
68         ans = (ans * t) % mod;
69     }
70     printf("%lld\n", ans);
71     return 0;
72 }

原文地址:https://www.cnblogs.com/JHSeng/p/12332531.html

时间: 2024-08-02 22:40:28

2019-2020 ICPC Southwestern European Regional Programming Contest (SWERC 2019-2020)的相关文章

2018-2019 ICPC Northwestern European Regional Programming Contest (NWERC 2018)

J题队友犯了初始化的错,白给6发,本来能1A的 B: solver:lzh.czq 就是个拓扑排序 1 #include <bits/stdc++.h> 2 using namespace std; 3 #define ff first 4 #define ss second 5 #define mp make_pair 6 typedef long long ll; 7 typedef pair<int, int> pii; 8 9 vector<int> g[400

2018-2019 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2018) Solution

A. Numbers Unsolved. B. Broken Watch Solved. 题意: 一个圆盘上,有等分的n块区域,有三根指针,当三根指针分别位于两块区域的交界处时 指针的三点相连会形成一个三角形,求有多少个三角包含三指针的起点(即交汇处) 思路: 1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 typedef unsigned long long ull; 6 typedef long long ll; 7 8 ll

2004-2005 ACM-ICPC Southeastern European Regional Programming Contest (SEERC 2004)

https://codeforc.es/gym/101461 5题结束了,可能是只打了3个小时吧.要是E试试Java8去用高精浮点二分,或者坚持读下来发现F是个割点模板题?以后可能远古场还是不打了,要拉2015年以内的. D - City Game 悬线法求最大非1子矩阵,根据up[i][j]=(g[i][j]==0)?0:up[i-1][j]+1预处理出悬线.然后每一行用单调栈扫.注意悬线法,某个元素被弹出之后,弹出他的元素会继承他的管辖范围!所以当时的办法是弄两个栈,一个栈存单调递增的悬线下

2016-2017 ACM-ICPC Northwestern European Regional Programming Contest (NWERC 2016) 个人题解

Problem C Careful Ascent 可怜的我们被卡在了签到题上,当时用的二分来做,结果速度的左右区间写成了[0,1e32],而改成[-1e32,1e32]就通过了,哎-,怎么就没想到去改一下区间的范围呢. 下面是正常的数学解法,类似于解一元一次方程. #include <iostream> using namespace std; typedef long long ll; ll x,y,n; ll a,b;double c; int main(){ cin>>x&g

训练20191007 2017-2018 ACM-ICPC Latin American Regional Programming Contest

2017-2018 ACM-ICPC Latin American Regional Programming Contest 试题地址:http://codeforces.com/gym/101889 总体情况 总共通过7题CEFGHIJ.其中我完成HIJ三题.纯属被大佬带飞系列. 解题报告 H - Hard choice 签到题 #include <bits/stdc++.h> using namespace std; int a1,b1,c1,a2,b2,c2; int main() {

2020.3.21 Benelux Algorithm Programming Contest 2019 解题报告

B-Breaking Branches 大意就是两个人掰树枝子玩,是个典型的博弈题,判断能不能被2整除就可以了 #include<cstdio> using namespace std; int main(){ long long int n,m,t; scanf("%lld",&n); if(n%2==0){ printf("Alice\n"); printf("1\n"); }else{ printf("Bob\

2017-2018 ACM-ICPC Latin American Regional Programming Contest Solution

A - Arranging tiles 留坑. B - Buggy ICPC 题意:给出一个字符串,然后有两条规则,如果打出一个辅音字母,直接接在原字符串后面,如果打出一个元音字母,那么接在原来的字符串后面之后再翻转整个字符串,在这两条规则之下,求有多少种打印给定字符串的方法 思路:如果第一个字符是辅音,那么答案为0 如果全是辅音或全是元音,那么答案为1 如果只有一个辅音,答案为len 否则是最中间两个元音中间的辅音字符个数+1 1 #include <bits/stdc++.h> 2 3 u

2017-2018 ACM-ICPC Latin American Regional Programming Contest

题面pdfhttps://codeforc.es/gym/101889/attachments/download/7471/statements-2017-latam-regional.pdf zyn感冒,两个人打.刚开始两题超迅速,40分钟后开始各种写不出,自闭.然后突然又开出两题. 4题全部1A,70名左右应该能稳个银. 说明卡题了可千万不能放弃!虽然可能简单题做不出来,过的多的题目做不出来,也不要放弃去开题. 以及周末这两场都说明一定要胆子大. B---Buggy ICPC[找规律] 题意

2017-2018 ACM-ICPC Latin American Regional Programming Contest GYM101889

挺有意思的一套题,题也没有啥毒瘤了,本来是队切的结果种种原因大家全挂机了. 只补了百人题,一共7个,其他的暂时先不补了,,也不会嘛qwq H:签到 1 #include <bits/stdc++.h> 2 using namespace std; 3 int a[18],b[18]; 4 int main(){ 5 cin>>a[1]>>a[2]>>a[3]>>b[1]>>b[2]>>b[3]; 6 int ans = 0