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 }
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 }
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 }
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 }
以上是关于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+输出路径)