• 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
    ", pre + 1);
    29             return 0;
    30         }
    31     printf("%d
    ", 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
    ", 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
    ", 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
    ", 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
    ", 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,
    ", 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,
    ", y, ans);
    134         /*if (m[y].ff != 0) {
    135             printf("over!! -----%lld %lld %lld %lld
    ", 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
    ", 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
    ", ans);
    71     return 0;
    72 }
    View Code
  • 相关阅读:
    iostream与iostream.h的区别
    [HAOI2011]向量
    [POI2011]Temperature
    [洛谷2839/国家集训队]middle
    [TJOI2013]松鼠聚会
    [HNOI2015]接水果
    [BZOJ3772]精神污染
    [BZOJ3251]树上三角形
    [ZJOI2011]道馆之战
    [SDOI2013]森林
  • 原文地址:https://www.cnblogs.com/JHSeng/p/12332531.html
Copyright © 2020-2023  润新知