• AtCoder Beginner Contest 101


    A - Eating Symbols Easy

    大意:

    一开始是0,四个符号,-是-1,+是+1

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    string s;
    int main() {
        cin >> s;
        int res = 0;
        for (int i = 0; i < 4;i++)
            if (s[i] == '-') res--;
            else
                res++;
        cout << res << endl;
        return 0;
    }
    

    B - Digit Sums

    大意:

    数位和能不能整除这个数

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int n,tmp,sum;
    int main(){
        cin >> n;
        tmp = n;
        sum = 0;
        while(tmp){
            sum += tmp % 10;
            tmp /= 10;
        }
        if (n % sum==0) cout << "Yes" << endl;
        else
            cout << "No" << endl;
        return 0;
    }
    

    C - Minimization

    大意:

    给出一个n的全排列,每次可以选择k个数,将这k个数用k个数里面的最小值替换,问操作多少次可以将n个数变为相等的数

    思路:

    直接从左到右顺着变换即可,注意分类讨论一下k=2的情况

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int n, k, x;
    int main() {
        cin >> n >> k;
        for (int i = 0; i < n; i++) cin >> x;
        if (k >= n)
            cout << 1 << endl;
        else if(k==2)
            cout << n - 1 << endl;
        else if (n % (k - 1) == 1 || n % (k - 1) == 0)
            cout << n / (k - 1) << endl;
        else
            cout << n / (k - 1) + 1 << endl;
        return 0;
    }
    

    D - Snuke Numbers

    大意:

    定义Snuke number n为对于所有大于n的数m,都有:n/n的数位和<=m/m的数位和

    输入一个数k,输出前k小的Snuke number

    思路:

    打表,然后发现基本后面的位都是9,但是最高位可能是1-9,也有可能是10-99,再往后就没打出来了,所以只能根据这个不是规律的规律进行构造,然后判断再输出即可。

    p为最高位,q为位数:

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    LL n;
    
    LL get(LL x) {
        LL sum = 0;
        while (x) {
            sum += x % 10;
            x /= 10;
        }
        return sum;
    }
    LL num = 0;
    int main() {
        cin >> n;
        LL p = 2, q = 1;
        while (n) {
            LL now = p * q - 1;
            LL ne = ceil(1.0 * p / 10) * q * 10 - 1;
            if (now * get(ne) > ne * get(now)) {
                p = ceil(1.0 * p / 10);
                q *= 10;
            } else {
                cout << now << endl;
                n--;
                p++;
            }
        }
        return 0;
    }
    
  • 相关阅读:
    python学习笔记day08 文件功能详解
    python学习笔记day08 文件操作
    python学习笔记day07 小结
    python学习笔记day07 集合
    python学习笔记day06 购物车实现
    python学习笔记 day06 小知识点总结
    python学习笔记day01_03python 发展历史
    python学习笔记 day06
    python学习笔记 day05 习题讲解
    PAT L2-002 链表去重
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/14355084.html
Copyright © 2020-2023  润新知