Codeforces Round #440 (Div. 2)ABCE

Posted GraceSkyer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #440 (Div. 2)ABCE相关的知识,希望对你有一定的参考价值。

Codeforces Round #440 (Div. 2)

 

codeforces 870 A. Search for Pretty Integers(水题)

题意:给两个数组,求一个最小的数包含两个数组各至少一个数。

技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int n, m;
 6 int a[11], b[11];
 7 int main() {
 8     int i, j, x = 10, y = 10, s = 10;
 9     scanf("%d%d", &n, &m);
10     for(i = 1; i <= n; ++i) {
11         scanf("%d", &a[i]); if(a[i] < x) x = a[i];
12     }
13     for(i = 1; i <= m; ++i) {
14         scanf("%d", &b[i]); if(b[i] < y) y = b[i];
15         for(j = 1; j <= n; ++j)
16             if(a[j] == b[i] && b[i] < s) s = b[i];
17     }
18     if(s < 10) printf("%d\n", s);
19     else {
20         if(x > y) swap(x, y);
21         printf("%d%d\n", x, y);
22     }
23     return 0;
24 }
31ms

codeforces 870 B. Maximum of Maximums of Minimums(模拟)

题意:给一排N个数,要求分割成K份,每份里面取出最小的数,再从取出的这些数中求最大的数,,求能得到的最大的数。

题解:K=1时答案即为最小的数,K≥3时,答案为这排数中最大的数,K=2时,就是两端 两个数的最大的一个。

 

技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 const int N = 100005;
 6 int n, m;
 7 int a[N];
 8 int main() {
 9     int i, j, mi = 1000000001, ma = -1000000001;
10     scanf("%d%d", &n, &m);
11     for(i = 1; i <= n; ++i) {
12         scanf("%d", &a[i]);
13         if(a[i] < mi) mi = a[i];
14         if(a[i] > ma) ma = a[i];
15     }
16     if(m==1) printf("%d\n", mi);
17     else if(m==2) printf("%d\n", max(a[1], a[n]));
18     else printf("%d\n", ma);
19     return 0;
20 }
31ms

 

codeforces 870 C. Maximum splitting(数学)

题意:一个数拆分成几个合数之和,求最多能拆分成几个数之和。

题解:合数为4,6,9最优咯。

技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 int main() {
 6     int t, n;
 7     scanf("%d", &t);
 8     while(t--) {
 9         scanf("%d", &n);
10         int ans = 0;
11         if(n & 1) {
12             n -=9; ans++;
13         }
14         if(n < 4 && n != 0)    puts("-1");
15         else {
16             ans += n/4;
17             printf("%d\n", ans);
18         }
19     }
20     return 0;
21 }
61ms

codeforces 870 E. Points, Lines and Ready-made Titles(思维)

题意:对每个点,可以绘制一条垂直线,或一条水平线,或什么都不做。几条重合的直线是一条直线,求可以得到多少个不同的图片。

题解:排序,将同一行的用并查集合并,再将同一列的也合并,假设一个集合的点在原图的不重复行列数为s,如果该集合的点在原图中不能形成环,则该集合的贡献是2^s-1(少一种是环的图形),否则贡献为2^s。

 

技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5 typedef long long ll;
 6 const int N = 100005;
 7 const ll mod = 1e9+7;
 8 int f[N], r1[N], r2[N];
 9 struct node {
10     int x, y, id;
11 }p[N];
12 int cmp1(node a, node b) {return a.x < b.x;}
13 int cmp2(node a, node b) {return a.y < b.y;}
14 int fin(int x) {
15     if(f[x]!=x) f[x] = fin(f[x]);
16     return f[x];
17 }
18 void uni(int x, int y) {
19     if((x=fin(x)) == (y=fin(y))) r2[y]++;
20     else {
21         f[x] = y;
22         r1[y] += r1[x];
23         r2[y] += r2[x] + 1;
24     }
25 }
26 int main() {
27     int n, i, j;
28     ll ans = 1;
29     ll a[2*N]; a[0] = 1ll;
30     for(i = 1; i < 2*N; ++i) a[i] = (a[i-1] * 2) % mod;
31     scanf("%d", &n);
32     memset(r2, 0, sizeof(r2));
33     for(i = 1; i <= n; ++i) {
34         scanf("%d%d", &p[i].x, &p[i].y);
35         p[i].id = i;
36         f[i] = i;
37         r1[i] = 1;
38     }
39     sort(p+1, p+1+n, cmp1);
40     for(i = 2; i <= n; ++i)
41         if(p[i].x == p[i-1].x) uni(p[i].id, p[i-1].id);
42     sort(p+1, p+1+n, cmp2);
43     for(i = 2; i <= n; ++i)
44         if(p[i].y == p[i-1].y) uni(p[i].id, p[i-1].id);
45 
46     for(i = 1; i <= n; ++i)
47         if(f[i] == i) {
48             if(r1[i] == r2[i]+1) ans = ans * (ll)(a[r1[i]+1] - 1) % mod;
49             else ans = ans * (ll)(a[2*r1[i] - r2[i]]) % mod;
50         }
51     printf("%lld\n", ans);
52     return 0;
53 }
93ms

 

以上是关于Codeforces Round #440 (Div. 2)ABCE的主要内容,如果未能解决你的问题,请参考以下文章

codeforces Round #440 A Search for Pretty Integershash/排序

[日常] Codeforces Round #440 Div.2 大力翻车实况

CodeForces875C[拓扑排序] Codeforces Round #440 [DIV2E/DIV1C]

Codeforces Round #436 E. Fire(背包dp+输出路径)

[ACM]Codeforces Round #534 (Div. 2)

Codeforces Round #726 (Div. 2) B. Bad Boy(贪心)