• 2019.7.9


    2019.7.9

    cf #572 div2 A

    给你一个只有0和1的字符串,如果0和1的数目不相等,那么就是good,求用最少次数拆分字符串,使得他所有子串都是good。

    思路:如果字符串是奇数位的,显然该字符串是good,不用拆分。如果是偶数位,先判断字符串是否是good,如果不是good,那就把第一个字符拆出来。

    #include <cstdio>
    
    int main() {
        int n;
        char a[110];
        while(~scanf("%d %s", &n, a)) {
            int cnt = 0;
            if(n % 2) printf("1
    %s
    ", a);
            else {
                for(int i = 0; i < n; i++) {
                    if(a[i] == '0') cnt++;
                }
                if(cnt != n / 2) printf("1
    %s
    ", a);
                else {
                    printf("2
    %c ", a[0]);
                    for(int i = 1; i < n; i++) printf("%c", a[i]);
                    printf("
    ");
                }
            }
        }
        return 0;
    }
    

    cf #572 div2 B

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int main() {
        int n;
        while(~scanf("%d", &n)) {
            int a[100010];
            for(int i = 0; i < n; i++) scanf("%d", &a[i]);
            sort(a,a + n);
            if(a[n-1] >= a[n - 2] + a[n - 3]) printf("NO
    ");
            else {
                printf("YES
    ");
                for(int i = 0; i < n; i += 2) printf("%d ", a[i]);
                for(int i = n - 1 - (n%2); i >= 0; i -= 2) printf("%d ", a[i]);
                printf("
    ");
            }
        }
        return 0;
    }
    

    cf #572 div2 C

    https://www.cnblogs.com/wyboooo/p/11153973.html

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int main() {
        int n;
        while(~scanf("%d", &n)) {
            int a[100010];
            a[0] = 0;
            for(int i = 1; i <= n; i++) {
                scanf("%d", &a[i]);
                a[i] += a[i-1];
            }
            int q;
            scanf("%d", &q);
            while(q--) {
                int l, r;
                scanf("%d %d", &l, &r);
                printf("%d
    ", (a[r] - a[l-1]) / 10);
            }
        }
        return 0;
    }
    

    cf #572 div2 D1

    判断是否存在度为二的节点,如果有就NO,否则YES。

    题意:能否通过改变两个叶子之间所有路径的值,使得每条路径可以任意改变其值。如果有度为二的节点,那么就有两条边的值是一定相等的。(注:题目中只有4567是叶子)

    #include <cstdio>
    #include <cstring>
    int main() {
        int n;
        while(~scanf("%d", &n)) {
            int a[100010], l, r, flag = 0;
            memset(a, 0, sizeof(a));
            for(int i = 0; i < n - 1; i++) {
                scanf("%d %d", &l, &r);
                a[l]++, a[r]++;
            }
            for(int i = 0; i < 100010; i++) {
                if(a[i] == 2) {
                    flag = 1;
                    break;
                }
            }
            if(flag) printf("NO
    ");
            else printf("YES
    ");
        }
        return 0;
    }
    
    

    cf #572 div2 E

    https://www.cnblogs.com/wyboooo/p/11155925.html

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    typedef long long LL;
    using namespace std;
    
    int a[300010];
    LL c[300010];
    
    int main() {
        c[0] = 0;
        for(int i = 1; i < 300010; i++) c[i] = c[i-1] + i;
        LL n, p, k;
        while(~scanf("%lld %lld %lld", &n, &p, &k)) {
            memset(a, 0, sizeof(a));
            LL ans = 0, b;
            for(int i = 0; i < n; i++) {
                scanf("%lld", &b);
                b = (b % p * b % p * b % p * b % p) + p - ((b % p) * (k % p) ) % p;
                b = b % p;
                a[i] = b;
            }
            sort(a, a+n);
            a[n] = p;
            int cnt = 1;
            for(int i = 0; i < n; i++) {
                if(a[i] == a[i+1]) {
                    cnt++;
                }
                else {
                    ans += c[cnt-1];
                    cnt = 1;
                }
            }
            printf("%lld
    ", ans);
        }
        return 0;
    }
    
    

    cf #571 div2 A

    水题

    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    int main(){
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        if(min(b,c)>=a) printf("Yes
    ");
        else printf("No
    ");
        return 0;
    }
    

    cf #571 div2 D

    注意9.000只能是9,而不能是10

    #include <cstdio>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    int main(){
        int n;
        while(~scanf("%d", &n)) {
            double a[100010];
            long long ans = 0;
            for(int i = 0; i < n; i++) {
                scanf("%lf", &a[i]);
                ans += (int)a[i];
            }
            //printf("ans=%d
    ",ans);
            if(ans >= 0) {
                for(int i = 0; i < n; i++) {
                    if(ans > 0 && a[i] <= 0 &&( (long long)(a[i] * 100000) % 100000 )!= 0) {
                        printf("%d
    ",(int) a[i] - 1);
                        ans--;
                    }
                    else printf("%d
    ",(int)a[i]);
                }
            }
            else {
                for(int i = 0; i < n; i++) {
                    if(ans < 0 && a[i] >= 0 &&( (long long)(a[i] * 100000) % 100000 )!= 0) {
                        printf("%d
    ", (int)a[i] + 1);
                        ans++;
                    }
                    else printf("%d
    ",(int)a[i]);
                }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    简简单单的 JavaScript简写技巧
    常用的前端小知识
    nuxt项目部署对静态页重编译问题
    docker 容器部署nuxt项目
    mysql数据库损坏修复问题
    storm supervisor和nimbus启动自动消失的问题
    MATLAB基础知识
    音视频入门-20-BMP、PNG、JPG、GIF静态图生成GIF动态图
    处理树状结构数据以及 React渲染
    React Hooks 获取最新数据问题
  • 原文地址:https://www.cnblogs.com/fanshhh/p/11163791.html
Copyright © 2020-2023  润新知