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

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 }
View Code

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 }
View Code

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 }
View Code

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 }
View Code

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 }
View Code

正确做法是分块打表

  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 }
View Code

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 }
View Code

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 }
View Code

 

posted @ 2020-02-19 18:39  JHSeng  阅读(1501)  评论(1编辑  收藏  举报