• Codeforces Round #440 (Div. 2)【A、B、C、E】


    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
    ", s);
    19     else {
    20         if(x > y) swap(x, y);
    21         printf("%d%d
    ", 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
    ", mi);
    17     else if(m==2) printf("%d
    ", max(a[1], a[n]));
    18     else printf("%d
    ", 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
    ", 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
    ", ans);
    52     return 0;
    53 }
    93ms
  • 相关阅读:
    JS 博客园鼠标点击效果
    安卓socket聊天
    抖音C#版,自己抓第三方抖音网站
    C#网易云音乐播放器
    反编译APK
    Raspberry Config.txt 介绍
    Raspberry U盘操作
    排序(I)
    未解决问题:
    CocoaPod 问题(I)
  • 原文地址:https://www.cnblogs.com/GraceSkyer/p/7674682.html
Copyright © 2020-2023  润新知