ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CodeForces 比赛笔记(1)

2022-03-06 21:31:08  阅读:180  来源: 互联网

标签:10 Code const 比赛 int dfrac CodeForces 笔记 read


1、Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)

A

注意最多只能跳一次。

 1 const int N = 110;
 2 int t, n, l, r, a[N];
 3 
 4 int main()
 5 {
 6     read(t);
 7     while (t--)
 8     {
 9         read(n); l = 1, r = n;
10         for (int i = 1; i <= n; ++i) read(a[i]);
11         while (l < n && a[l + 1]) ++l;
12         while (r > 1 && a[r - 1]) --r;
13         print(l > r ? 0 : r - l), pc('\n');
14     }
15     fwrite(pbuf, 1, pp - pbuf, stdout); return 0;
16 }
View Code

B

考虑踢球次数最多的人没踢完的话剩下的球都得自己踢,踢完了剩下的人传着踢就行。

所以答案就是最大的 $a[i]$ 减去其他 $a[i]$ 后的值跟 $1$ 取 $\max$,注意特判全为 $0$ 的情况。

 1 const int N = 1e5 + 10;
 2 int t, n, a[N];
 3 
 4 int main()
 5 {
 6     read(t);
 7     while (t--)
 8     {
 9         read(n);
10         for (int i = 1; i <= n; ++i) read(a[i]);
11         nth_element(a + 1, a + 1, a + n + 1, greater<int>());
12         if (!a[1]) { pc('0'), pc('\n'); continue; }
13         for (int i = 2; i <= n; ++i)
14         {
15             a[1] -= a[i];
16             if (a[1] < 1) break;
17         }
18         if (a[1] < 1) pc('1'), pc('\n');
19         else print(a[1]), pc('\n');
20     }
21     fwrite(pbuf, 1, pp - pbuf, stdout); return 0;
22 }
View Code

C

由于是曼哈顿距离,直接将答案拆成行和列的分别求解即可。

 1 const int N = 1e5 + 10;
 2 int n, m;
 3 ll ans, cnt[N], sum[N];
 4 vector<int> a[320];
 5 
 6 int main()
 7 {
 8     read(n, m);
 9     for (int x, i = 1; i <= n; ++i)
10     {
11         a[i].emplace_back(0);
12         for (int j = 1; j <= m; ++j)
13             read(x), a[i].emplace_back(x);
14     }
15     for (int i = 1; i <= n; ++i)
16     {
17         for (int j = 1; j <= m; ++j)
18             ans += cnt[a[i][j]] * i - sum[a[i][j]];
19         for (int j = 1; j <= m; ++j)
20             ++cnt[a[i][j]], sum[a[i][j]] += i;
21     }
22     memset(cnt, 0, sizeof(cnt));
23     memset(sum, 0, sizeof(sum));
24     for (int j = 1; j <= m; ++j)
25     {
26         for (int i = 1; i <= n; ++i)
27             ans += cnt[a[i][j]] * j - sum[a[i][j]];
28         for (int i = 1; i <= n; ++i)
29             ++cnt[a[i][j]], sum[a[i][j]] += j;
30     }
31     print(ans);
32     fwrite(pbuf, 1, pp - pbuf, stdout); return 0;
33 }
View Code

D

直接暴力枚举 $y$ 和 $\lfloor\dfrac{x}{y}\rfloor$,判断数组中是否存在 $x$ 但不存在 $\lfloor\dfrac{x}{y}\rfloor$ 即可。

由于枚举的是倍数关系,$\dfrac{n}{1}+\dfrac{n}{2}+\dfrac{n}{3}+\cdots+\dfrac{n}{n}=O(n\log{n})$,所以时间复杂度是正确的。

 1 const int N = 1e6 + 10;
 2 int t, n, c, a[N], cnt[N];
 3 
 4 inline bool check(int y)
 5 {
 6     for (int k = 1; k * y <= c; ++k)
 7     {
 8         int l = k * y - 1, r = Min(k * y + y - 1, c);
 9         if (cnt[r] - cnt[l] && !(cnt[k] - cnt[k - 1])) return false;
10     }
11     return true;
12 }
13 
14 int main()
15 {
16     read(t);
17     while (t--)
18     {
19         read(n, c); bool flag = true;
20         for (int i = 1; i <= n; ++i) read(a[i]), ++cnt[a[i]];
21         for (int i = 1; i <= c; ++i) cnt[i] += cnt[i - 1];
22         sort(a + 1, a + n + 1);
23         for (int i = 1; i <= n; ++i)
24             if (a[i] != a[i - 1] && !check(a[i])) { flag = false; break; }
25         puts(flag ? "Yes" : "No");
26         for (int i = 1; i <= c; ++i) cnt[i] = 0;
27     }
28     fwrite(pbuf, 1, pp - pbuf, stdout); return 0;
29 }
View Code

E

F

To be continued...

标签:10,Code,const,比赛,int,dfrac,CodeForces,笔记,read
来源: https://www.cnblogs.com/jhqqwq/p/15973523.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有