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\n", 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\n", 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\n", 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\n", 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\n", (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\n", ans);
33             return 0;
34         }
35     }
36     printf("-1\n");
37
38
39     return 0;
40 }

View Code

M:

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

转载于:https://www.cnblogs.com/JHSeng/p/10849630.html

2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)相关推荐

  1. 2016-2017 ACM-ICPC Pacific Northwest Regional Contest (Div. 2) 【部分题解】

    A:因为删除是不计入操作次数的,所以转化一下就是求最长上升子序列,简单dp. 设dp[i]表示前i个字符能凑成上升子序列的最大长度,dp[i] = max(dp[j]+1, dp[i]) [j < ...

  2. 2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) - D Count The Bits

    题目链接 Given an integer k and a number of bits b (1 ≤ b ≤ 128), calculate the total number of 1 bits i ...

  3. Gym 101982 (2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1) )

    传送门: Problem A 温暖的签到题 #include<bits/stdc++.h> using namespace std; const int maxn=1007; char s ...

  4. 2018-2019 ACM-ICPC Pacific Northwest Regional Contest (Div. 1)DCount The Bits(dp/数位dp)

    D Count The Bits 题意: 输入k,b(1≤k≤1000,1≤b≤128);k,b(1\leq k\leq 1000,1\leq b\leq128);k,b(1≤k≤1000,1≤b≤1 ...

  5. 2016 ACM / ICPC Asia dalian Regional Contest 题解(11 / 11)【每日亿题2021 / 2 / 17】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A .(2017 ACM ICPC dalian H)To begin or not to be ...

  6. 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...

  7. 2013-2014 ACM-ICPC Pacific Northwest Regional Contest题解

    ProblemSet A by ? B by ? 先Floyd求出两两之间最短路. 二分答案,新建一个图,<=x点对连距离为1的边 再施展Floyd,判断,最远两点距离<=k C by ? ...

  8. The 2019 ICPC Asia Shanghai Regional Contest

    The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...

  9. 2018 ICPC Asia Jakarta Regional Contest

    2018 ICPC Asia Jakarta Regional Contest 题号 题目 知识点 难度 A Edit Distance B Rotating Gear C Smart Thief D ...

最新文章

  1. 被「卡脖子」的尖端技术该如何前行?刘明张亚勤等院士大咖为你解惑 | CNCC2020...
  2. Android移动开发之【Android实战项目】记一次app开发过程!
  3. 学python需要安装什么软件-学武汉Python培训课程需要安装什么软件?分享这10款...
  4. 全面讲解Python列表数组(三)列表数组类型的内置函数方法
  5. Java中FileInputStream和FileOutputStream类实现文件夹及文件的复制粘贴
  6. 计算机辅助技术课设,《计算机辅助设计技术》课程标准-20210311103339.doc-原创力文档...
  7. python 如何边改代码边调试_Python 代码调试神器:PySnooper
  8. 嵌入式开发笔记(二)嵌入式系统启动过程 (S5pv210)
  9. android UDP通信
  10. BZOJ-3226 校门外的区间 线段数+拆点(类似的思想)
  11. (原创)日志处理(修改)
  12. Android Studio个人所得税首页布局制作
  13. Canvas API
  14. 这个开源好用的数据库建模工具,让我眼前一亮
  15. 搜索开启WPS功能的路由wash
  16. 【学习笔记】产品经理必备技能之竞品分析(下)用户体验五要素分析法 + 竞品分析报告
  17. iOS11及iPhone X适配
  18. 机器学习中 熵的理解
  19. ppt如何查看加载宏
  20. 《超大流量分布式系统架构解决方案-人人都是架构师2.0》读书笔记

热门文章

  1. runtime运行时编程一些相关知识
  2. 90%的用户都不知道手机内部功能
  3. 添加支付宝支付按钮,实现捐赠本站
  4. 用什么样的个人笔记类软件?OneNote、EverNote(印象笔记)、为知笔记、麦库记事、有道云笔记……...
  5. ros 工作流程图4
  6. 动态生成treeview
  7. leetcood学习笔记-45-跳跃游戏二
  8. [Bash] Search for Text with `grep`
  9. 微信小程序wx.navigateTo路由循环嵌套问题解决
  10. sudo apt-get update: 0% [正在等待报头]