zoukankan      html  css  js  c++  java
  • 2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)

    gdcpc前一天上午搞了场训练,水题挺多,还算增强信心。(这么简单的题目居然还是div1,这赛区……

    最终9题,平均每人3题,我写ACF。被hry压了一道E (难受啊。

    下午去中大试机,win7系统就算了,键盘垃圾得要死 (就我工软院机房那种巧克力键盘),还居然用的是云桌面,不能用alt+tab、win+d这种快捷键 (这真的难受。

    随便写了写热身赛,看到有个sb线段树 (跟 https://ac.nowcoder.com/acm/contest/200/B?&headNav=www 一模一样) 我都不是很想写 (困得要死。

    但是我知道明天的比赛绝对没有早上的训练这么水。希望能正常发挥,拿个Ag吧。

    题目链接:http://codeforces.com/gym/101982


    A:

    温暖签到。

     1 /* basic header */
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <string>
     6 #include <cstring>
     7 #include <cmath>
     8 #include <cstdint>
     9 #include <climits>
    10 #include <float.h>
    11 /* STL */
    12 #include <vector>
    13 #include <set>
    14 #include <map>
    15 #include <queue>
    16 #include <stack>
    17 #include <algorithm>
    18 #include <array>
    19 #include <iterator>
    20 /* define */
    21 #define ll long long
    22 #define dou double
    23 #define pb emplace_back
    24 #define mp make_pair
    25 #define fir first
    26 #define sec second
    27 #define sot(a,b) sort(a+1,a+1+b)
    28 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    29 #define rep0(i,a,b) for(int i=a;i<b;++i)
    30 #define repa(i,a) for(auto &i:a)
    31 #define eps 1e-8
    32 #define int_inf 0x3f3f3f3f
    33 #define ll_inf 0x7f7f7f7f7f7f7f7f
    34 #define lson curPos<<1
    35 #define rson curPos<<1|1
    36 /* namespace */
    37 using namespace std;
    38 /* header end */
    39 
    40 int k;
    41 string a, b;
    42 
    43 int main()
    44 {
    45     cin >> k >> a >> b;
    46     int same = 0, diff = 0;
    47     int len = a.size();
    48     for (int i = 0; i < len; i++)
    49             if (a[i] != b[i]) diff++; else same++;
    50     if (same <= k) cout << same + diff - k + same << endl;
    51     else cout << k + diff << endl;
    52     return 0;
    53 }
    View Code

    B:

    枚举答案即可。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 const int maxn = 10010000;
     8 
     9 int N[maxn];
    10 int p[maxn];
    11 int mu[maxn];
    12 int cnt;
    13 void sha()
    14 {
    15     N[1] = 1;
    16     mu[1] = 1;
    17     for (int i = 2; i < maxn; i++)
    18     {
    19         if (!N[i])
    20         {
    21             p[++cnt] = i;
    22             mu[i] = -1;
    23         }
    24         for (int j = 1; j <= cnt; j++)
    25         {
    26             if (i * p[j] >= maxn) break;
    27             N[i * p[j]] = 1;
    28             if (i % p[j] == 0)
    29             {
    30                 mu[i * p[j]] = 0;
    31                 break;
    32             }
    33             else
    34             {
    35                 mu[i * p[j]] = -mu[i];
    36             }
    37         }
    38     }
    39 }
    40 
    41 int sum[maxn];
    42 typedef long long ll;
    43 
    44 ll cal(ll n, ll m)
    45 {
    46     long long ans = 0;
    47     if (n > m) swap(n, m);
    48     for (int i = 1, la = 0; i <= n; i = la + 1)
    49     {
    50         la = min(m / (m / i), n / (n / i));
    51         ans += (sum[la] - sum[i - 1]) * (n / i) * (m / i);
    52     }
    53     return ans;
    54 }
    55 
    56 int main()
    57 {
    58     sha();
    59     ll a, b, x, y;
    60     cin >> a >> b >> x >> y;
    61     for (int i = 1; i < maxn; i++)
    62     {
    63         sum[i] = sum[i - 1]  + mu[i];
    64     }
    65     ll ans = cal(b, y) - cal(a - 1, y) - cal(b, x - 1) + cal(a - 1, x - 1);
    66     cout << ans << endl;
    67     return 0;
    68 }
    View Code

    C:

    简单dp。

     1 /* basic header */
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstdlib>
     5 #include <string>
     6 #include <cstring>
     7 #include <cmath>
     8 #include <cstdint>
     9 #include <climits>
    10 #include <float.h>
    11 /* STL */
    12 #include <vector>
    13 #include <set>
    14 #include <map>
    15 #include <queue>
    16 #include <stack>
    17 #include <algorithm>
    18 #include <array>
    19 #include <iterator>
    20 /* define */
    21 #define ll long long
    22 #define dou double
    23 #define pb emplace_back
    24 #define mp make_pair
    25 #define fir first
    26 #define sec second
    27 #define rep1(i,a,b) for(int i=a;i<=b;++i)
    28 #define rep0(i,a,b) for(int i=a;i<b;++i)
    29 #define repa(i,a) for(auto &i:a)
    30 #define eps 1e-8
    31 #define int_inf 0x3f3f3f3f
    32 #define ll_inf 0x7f7f7f7f7f7f7f7f
    33 #define lson curPos<<1
    34 #define rson curPos<<1|1
    35 /* namespace */
    36 using namespace std;
    37 /* header end */
    38 
    39 const int maxn = 1e3 + 10;
    40 const ll mod = 998244353;
    41 map<ll, ll>cnt;
    42 vector<ll>v;
    43 ll a[maxn], dp[maxn][maxn], ans[maxn][maxn];
    44 
    45 int main()
    46 {
    47     int n, k;
    48     ll x;
    49     scanf("%d%d", &n, &k);
    50     rep1(i, 1, n)
    51     {
    52         scanf("%lld", &x);
    53         if (!cnt[x]) v.push_back(x);
    54         cnt[x]++;
    55     }
    56     n = v.size();
    57     rep1(i, 1, n) a[i] = cnt[v[i - 1]];
    58     rep1(i, 1, n)
    59     {
    60         dp[1][i] = a[i] % mod;
    61         ans[1][i] = (dp[1][i] + ans[1][i - 1]) % mod;
    62     }
    63     rep1(i, 2, k)
    64     {
    65         rep1(j, 1, n)
    66         {
    67             dp[i][j] = a[j] * ans[i - 1][j - 1] % mod;
    68             ans[i][j] = (dp[i][j] + ans[i][j - 1]) % mod;
    69         }
    70     }
    71     printf("%lld
    ", ans[k][n]);
    72     return 0;
    73 }
    View Code

    D:

    数位dp,队友搞出来的,我没看懂。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 typedef long long ll;
     9 ll f[130][1110][130];
    10 ll mod = 1000000009;
    11 
    12 int main()
    13 {
    14     ll Mod, bit;
    15     cin >> Mod >> bit;
    16     f[1][1 % Mod][1] = 1;
    17     for (int i = 1; i <= bit; i++)
    18     {
    19         for (int j = 0; j < Mod; j++)
    20         {
    21             for (int k = 0; k <= i; k++)
    22             {
    23                 f[i + 1][(j * 2) % Mod][k] += f[i][j][k];
    24                 f[i + 1][(j * 2 + 1) % Mod][k + 1] += f[i][j][k];
    25                 f[i + 1][(j * 2) % Mod][k] %= mod;
    26                 f[i + 1][(j * 2 + 1) % Mod][k + 1] %= mod;
    27             }
    28         }
    29     }
    30     ll ans = 0;
    31     for (int i = 1; i <= bit; i++)
    32     {
    33         for (int j = 0; j <= i; j++)
    34         {
    35             ans += f[i][0][j] * j;
    36             ans %= mod;
    37         }
    38     }
    39     cout << ans << endl;
    40     return 0;
    41 }
    View Code

    E:

    没做。胡老师写的是最小割。

    F:

    超级classic的扫描线套线段树,不用看板子都能写。

      1 /* basic header */
      2 #include <iostream>
      3 #include <cstdio>
      4 #include <cstdlib>
      5 #include <string>
      6 #include <cstring>
      7 #include <cmath>
      8 #include <cstdint>
      9 #include <climits>
     10 #include <float.h>
     11 /* STL */
     12 #include <vector>
     13 #include <set>
     14 #include <map>
     15 #include <queue>
     16 #include <stack>
     17 #include <algorithm>
     18 #include <array>
     19 #include <iterator>
     20 /* define */
     21 #define ll long long
     22 #define dou double
     23 #define pb emplace_back
     24 #define mp make_pair
     25 #define fir first
     26 #define sec second
     27 #define sot(a,b) sort(a+1,a+1+b)
     28 #define rep1(i,a,b) for(int i=a;i<=b;++i)
     29 #define rep0(i,a,b) for(int i=a;i<b;++i)
     30 #define repa(i,a) for(auto &i:a)
     31 #define eps 1e-8
     32 #define int_inf 0x3f3f3f3f
     33 #define ll_inf 0x7f7f7f7f7f7f7f7f
     34 #define lson curPos<<1
     35 #define rson curPos<<1|1
     36 /* namespace */
     37 using namespace std;
     38 /* header end */
     39 
     40 const int maxn = 2e5 + 10;
     41 int n, cntx[maxn], cnty[maxn], cnt1 = 0, cnt2 = 0;
     42 ll ans = 0;
     43 vector<pair<int, int>>v[maxn];
     44 
     45 //muban
     46 
     47 struct Rectangle
     48 {
     49     int x[2], y[2];
     50     void read()
     51     {
     52         rep0(i, 0, 2) scanf("%d%d", &x[i], &y[i]);
     53         if (x[0] > x[1]) swap(x[0], x[1]);
     54         if (y[0] > y[1]) swap(y[0], y[1]);
     55         cntx[++cnt1] = x[0], cntx[++cnt1] = x[1], cnty[++cnt2] = y[0], cnty[++cnt2] = y[1];
     56     }
     57 };
     58 
     59 struct Node
     60 {
     61     ll sum, val, lazy;
     62     Node() {}
     63     Node(ll a, ll b, ll c): sum(a), val(b), lazy(c) {}
     64     //maintain
     65     Node operator+(const Node &rhs)
     66     {
     67         return Node(sum + rhs.sum, val + rhs.val, 0);
     68     }
     69 
     70     void solve()
     71     {
     72         val = sum - val; lazy ^= 1;
     73     }
     74 };
     75 
     76 Node segt[maxn << 2];
     77 Rectangle r[maxn];
     78 
     79 void _hash()
     80 {
     81     sot(cntx, cnt1); sot(cnty, cnt2);
     82     cnt1 = unique(cntx + 1, cntx + 1 + cnt1) - cntx - 1, cnt2 = unique(cnty + 1, cnty + 1 + cnt2) - cnty - 1;
     83     rep1(i, 1, n)
     84     {
     85         rep0(j, 0, 2)
     86         {
     87             r[i].x[j] = lower_bound(cntx + 1, cntx + 1 + cnt1, r[i].x[j]) - cntx;
     88             r[i].y[j] = lower_bound(cnty + 1, cnty + 1 + cnt2, r[i].y[j]) - cnty;
     89         }
     90     }
     91 }
     92 
     93 void build(int curPos, int curL, int curR)
     94 {
     95     segt[curPos] = Node(0, 0, 0);
     96     if (curL == curR)
     97     {
     98         segt[curPos].sum = cnty[curL + 1] - cnty[curL];
     99         return;
    100     }
    101     int mid = (curL + curR) >> 1;
    102     build(lson, curL, mid); build(rson, mid + 1, curR);
    103     segt[curPos] = segt[lson] + segt[rson];
    104 }
    105 
    106 void pushdown(int curPos)
    107 {
    108     if (!segt[curPos].lazy) return;
    109     segt[lson].solve(); segt[rson].solve(); segt[curPos].lazy = 0;
    110 }
    111 
    112 void update(int curPos, int curL, int curR, int qL, int qR)
    113 {
    114     if (qL <= curL && curR <= qR)
    115     {
    116         segt[curPos].solve(); return;
    117     }
    118     int mid = (curL + curR) >> 1;
    119     pushdown(curPos);
    120     if (qL <= mid) update(lson, curL, mid, qL, qR);
    121     if (qR > mid) update(rson, mid + 1, curR, qL, qR);
    122     segt[curPos] = segt[lson] + segt[rson];
    123 }
    124 
    125 int main()
    126 {
    127     scanf("%d", &n);
    128     rep1(i, 1, 2 * n) v[i].clear();
    129     rep1(i, 1, n) r[i].read();
    130     _hash();
    131     rep1(i, 1, n)
    132     {
    133         v[r[i].x[0]].pb(r[i].y[0], r[i].y[1] - 1);
    134         v[r[i].x[1]].pb(r[i].y[0], r[i].y[1] - 1);
    135     }
    136     n *= 2;
    137     build(1, 1, n);
    138     rep0(i, 1, cnt1)
    139     {
    140         for (auto i : v[i]) update(1, 1, n, i.first, i.second);
    141         ans += segt[1].val * (cntx[i + 1] - cntx[i]);
    142     }
    143     printf("%lld
    ", ans);
    144     return 0;
    145 }
    View Code

    G:

    分类讨论弱智题。

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<cstring>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 const int maxn = 200000;
     8 
     9 double cal(double x, double y, double x1, double y1)
    10 {
    11     double a = (x1 - x);
    12     double b = (y1 - y);
    13     return sqrt(a * a + b * b);
    14 }
    15 
    16 int main()
    17 {
    18     double x, y, x1, y1, x2, y2;
    19     cin >> x >> y >> x1 >> y1 >> x2 >> y2;
    20     double ans = 1e9;
    21     if (x1 <= x2)
    22     {
    23         if (x1 <= x && x <= x2)
    24         {
    25             ans = min(abs(y1 - y), abs(y2 - y));
    26         }
    27     }
    28     else
    29     {
    30         if (x2 <= x && x <= x1)
    31         {
    32             ans = min(abs(y1 - y), abs(y2 - y));
    33         }
    34     }
    35     if (y1 <= y2)
    36     {
    37         if (y1 <= y && y <= y2)
    38         {
    39             ans = min(abs(x1 - x), abs(x2 - x));
    40         }
    41     }
    42     else
    43     {
    44         if (y2 <= y && y <= y1)
    45         {
    46             ans = min(abs(x1 - x), abs(x2 - x));
    47         }
    48     }
    49     ans = min(ans, cal(x, y, x1, y1));
    50     ans = min(ans, cal(x, y, x1, y2));
    51     ans = min(ans, cal(x, y, x2, y1));
    52     ans = min(ans, cal(x, y, x2, y2));
    53     printf("%.3lf
    ", ans);
    54     return 0;
    55 }
    View Code

    H:

    队友跟我说完,我看了一眼范围(n<=1e6),妥妥的暴力。

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 
     5 using namespace std;
     6 
     7 const int MAXN = 1000000;
     8 
     9 bool check[MAXN + 10];
    10 bool isPrime[MAXN + 10];
    11 int prime[MAXN + 10];
    12 int tot;
    13 
    14 void getPrime(int N = MAXN)
    15 {
    16     memset(check, false, sizeof(check));
    17     tot = 0;
    18     for (int i = 2; i <= N; i++)
    19     {
    20         if (!check[i])
    21         {
    22             prime[tot++] = i;
    23             isPrime[i] = true;
    24         }
    25         for (int j = 0; j < tot; j++)
    26         {
    27             if (i * prime[j] > N) break;
    28             check[i * prime[j]] = true;
    29             if (i % prime[j] == 0) break;
    30         }
    31     }
    32 }
    33 
    34 
    35 int main(void)
    36 {
    37     getPrime();
    38     int x;
    39     scanf("%d", &x);
    40     int ans = 0;
    41     while (x >= 4)
    42     {
    43         for (int i = 0; i < tot; i++)
    44         {
    45             if (isPrime[x - prime[i]])
    46             {
    47                 int diff = x - 2 * prime[i];
    48                 if (diff % 2 == 0)
    49                 {
    50                     x = diff;
    51                     break;
    52                 }
    53             }
    54         }
    55         ans++;
    56     }
    57     printf("%d
    ", ans);
    58     return 0;
    59 }
    View Code

    I:

    cdq分治?不懂。

    J:

    完全没看题,看队友代码好像又是签到。

     1 #include <cstdio>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 int main(void)
     7 {
     8     int n, s;
     9     scanf("%d %d", &n, &s);
    10     int maxi = 0;
    11     while (n--)
    12     {
    13         int t;
    14         scanf("%d", &t);
    15         maxi = max(maxi, t);
    16     }
    17     printf("%d
    ", (maxi * s + 999) / 1000);
    18     return 0;
    19 }
    View Code

    K:

    队友觉得很可写,但是算法一直都是错的。

    L:

    好像又是傻题。枚举就完事了。

     1 #include<cstdio>
     2 #include<cstring>
     3 
     4 using namespace std;
     5 const int maxn = 200000;
     6 struct Node
     7 {
     8     int a, b;
     9 } A[maxn];
    10 
    11 int main()
    12 {
    13     int n;
    14     scanf("%d", &n);
    15     for (int i = 1; i <= n; i++)
    16     {
    17         scanf("%d%d", &A[i].a, &A[i].b);
    18     }
    19     for (int ans = n; ans >= 1; ans--)
    20     {
    21         int tot = 0;
    22         for (int i = 1; i <= n; i++)
    23         {
    24             if (A[i].a <= ans && ans <= A[i].b)
    25             {
    26                 tot++;
    27             }
    28 
    29         }
    30         if (tot == ans)
    31         {
    32             printf("%d
    ", ans);
    33             return 0;
    34         }
    35     }
    36     printf("-1
    ");
    37 
    38 
    39     return 0;
    40 }
    View Code

    M:

    我跟队友都觉得很像是贪心,但是都fake。

  • 相关阅读:
    request和response概念用法
    servlet知识点
    Nginx的安装和配置文件详细说明
    Tomcat优化
    Tomcat安装和常见问题
    WEB服务器和tomcat介绍
    WEB技术相关入门知识点
    前期绑定和后期绑定
    1-4选择题
    1-3选择题
  • 原文地址:https://www.cnblogs.com/JHSeng/p/10849630.html
Copyright © 2011-2022 走看看