zoukankan      html  css  js  c++  java
  • Technocup 2019

    题目链接:https://codeforces.com/contest/1032

    A - Kitchen Utensils

    题意:举办一场宴会,有 (k) 个人,每个人都消耗同样份数的餐具,且每份餐具中每种餐具至多一个。宴会结束发现有些餐具被偷了,已知剩下 (n) 个餐具,这 (n) 个餐具分别是第 (a_i) 种餐具。求至少被偷了多少个餐具。

    题解:首先把出现最多的餐具找出来,对人数取上整,就是最少的餐具份数。再统计一份餐具最少有几种。

    int cnt[105];
    
    void test_case() {
        int n, k;
        scanf("%d%d", &n, &k);
        for(int i = 1, x; i <= n; ++i) {
            scanf("%d", &x);
            ++cnt[x];
        }
        sort(cnt + 1, cnt + 1 + 100, greater<int>());
        int num = (cnt[1] + k - 1) / k * k;
        int siz = 0;
        for(int i = 1; i <= 100; ++i)
            siz += cnt[i] ? 1 : 0;
        printf("%d
    ", num * siz - n);
    }
    

    B

    char s[105];
    
    bool check(int r) {
        int n = strlen(s + 1);
        int c = (n + r - 1) / r;
        if(c > 20)
            return false;
        printf("%d %d
    ", r, c);
        int rest = r * c - n;
        int top = 0;
        for(int i = 1; i <= r; ++i) {
            for(int j = 1; j < c; ++j)
                printf("%c", s[++top]);
            if(rest) {
                printf("*
    ");
                --rest;
            } else
                printf("%c
    ", s[++top]);
        }
        return true;
    }
    
    void test_case() {
        scanf("%s", s + 1);
        for(int i = 1; i <= 5; ++i) {
            if(check(i))
                return;
        }
    }
    

    C - Playing Piano

    随便dp

    int a[100005];
    bool dp[100005][6];
    int pre[100005][6];
     
    void test_case() {
        int n;
        scanf("%d", &n);
        for(int i = 1; i <= n; ++i)
            scanf("%d", &a[i]);
        dp[1][1] = dp[1][2] = dp[1][3] = dp[1][4] = dp[1][5] = 1;
        for(int i = 2; i <= n; ++i) {
            if(a[i] > a[i - 1]) {
                for(int j = 2; j <= 5; ++j) {
                    for(int k = 1; k < j; ++k) {
                        if(dp[i - 1][k]) {
                            dp[i][j] = 1;
                            pre[i][j] = k;
                            break;
                        }
                    }
                }
            } else if(a[i] < a[i - 1]) {
                for(int j = 1; j <= 4; ++j) {
                    for(int k = j + 1; k <= 5; ++k) {
                        if(dp[i - 1][k]) {
                            dp[i][j] = 1;
                            pre[i][j] = k;
                            break;
                        }
                    }
                }
            } else {
                for(int j = 1; j <= 5; ++j) {
                    for(int k = 1; k <= 5; ++k) {
                        if(k == j)
                            continue;
                        if(dp[i - 1][k]) {
                            dp[i][j] = 1;
                            pre[i][j] = k;
                            break;
                        }
                    }
                }
            }
            /*for(int j = 1; j <= 5; ++j)
                printf("%d", (int)pre[i][j]);
            puts("");*/
        }
        for(int j = 1; j <= 5; ++j) {
            if(dp[n][j] == 1) {
                int cur = j;
                for(int i = n; i >= 1; --i) {
                    a[i] = cur;
                    cur = pre[i][cur];
                }
                for(int i = 1; i <= n; ++i)
                    printf("%d%c", a[i], " 
    "[i == n]);
                return;
            }
        }
        puts("-1");
        return;
    }
    
  • 相关阅读:
    如何调试webservice接口是否正常
    备份数据库表
    【web】sqli-labs学习
    【web】php文件包含(利用phpinfo)
    【二进制】【WP】MOCTF逆向题解
    【web】BUUCTF-web刷题记录
    【WP】【web】中学生CTF | web部分wp
    【密码学】AES简单学习
    【密码学】CBC反转字节攻击
    【WP】攻防世界-杂项-Misc
  • 原文地址:https://www.cnblogs.com/KisekiPurin2019/p/12258291.html
Copyright © 2011-2022 走看看