• AtCoder Beginner Contest 100


    A - Happy Birthday!

    大意:

    一个蛋糕分为16份,A和B各自需要拿a和b份,问能否使得每个人拿到的蛋糕都是不连续的:

    思路:

    先把较少的蛋糕数一一对应相隔,然后判断剩下的能否隔一个取一个即可

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int a, b;
    int main(){
        cin >> a >> b;
        if (a < b) swap(a, b);
        if (2 * (a - b) > (16 - 2 * b)) cout << ":(" << endl;
        else
            cout << "Yay!" << endl;
        return 0;
    }
    

    B - Ringo's Favorite Numbers

    大意:

    给出两个数d和n,要求输出第n个能被100整除d次的数(注意必须是d次,d+1次也不行)

    思路:

    两个数之间的间隔至少是pow(100,d),在此基础上,枚举一下判断即可

    #include<bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int n, d;
    int get(int num){
        int sum = 0;
        while (num){
            if (num % 100 == 0) sum++;
            num /= 100;
        }
        return sum;
    }
    int main(){
        cin >> d >> n;
        int base = pow(100, d);
        int res=0;
        while(n){
            res += base;
            if(get(res)==d){
                n--;
            }
        }
        cout << res << endl;
        return 0;
    }
    

    C - *3 or /2

    大意:

    给出n个数,每次操作需要将这n个数中,一部分乘3,一部分除以2,但是不能全部乘3,每次操作得到的数必须是整数

    问最多能操作多少次

    思路:

    计算这n个数一共能被2整除多少次即可

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

    D - Patisserie ABC

    大意:

    n个蛋糕,都有三个属性值xyz,现在需要取出m个蛋糕,使得x的和的绝对值+y的和的绝对值+z的和的绝对值

    思路:

    因为xyz各自的和要么是正要么是负,那么每个对于每个标号,每个蛋糕都会产生相应的贡献

    例如,最后的x的和的绝对值是正,y是负,z是负,那么对于一个x为正,y为正,z为正的蛋糕,它的贡献就是x-y-z

    所以可以枚举8种情况,每次都排序一下,取前m个数,然后更新最大值即可

    #include <bits/stdc++.h>
    
    using namespace std;
    
    const int N = 1e6 + 5;
    typedef long long LL;
    int n, m;
    struct node {
        LL x, y, z;
    } a[N];
    int f1, f2, f3;
    bool cmp(node a, node b) {
        return ((LL)f1 * a.x + (LL)f2 * a.y + (LL)f3 * a.z >
                (LL)f1 * b.x + (LL)f2 * b.y + (LL)f3 * b.z);
    }
    int main() {
        cin >> n >> m;
        for (int i = 0; i < n; i++) {
            cin >> a[i].x >> a[i].y >> a[i].z;
        }
        LL res = 0;
        for (f1 = -1; f1 <= 1; f1 += 2) {
            for (f2 = -1; f2 <= 1; f2 += 2) {
                for (f3 = -1; f3 <= 1; f3 += 2) {
                    sort(a, a + n, cmp);
                    LL tmp = 0;
                    for (int i = 0; i < m; i++) {
                        tmp += (LL)f1 * a[i].x + (LL)f2 * a[i].y + (LL)f3 * a[i].z;
                    }
                    res = max(res, tmp);
                }
                
            }
        }
        cout << res << endl;
        return 0;
    }
    
  • 相关阅读:
    “automation服务器不能创建对象”的问题的解决方案大全
    转载区分C#中的Abstract函数和Virtual函数
    DOS批处理
    数据库设计范式
    java 内存查看工具
    Java内存溢出详解
    Struts2 循环编辑指定次数
    Selenium 使用
    spring security 获取当前用户信息
    由MyEclipse内存不足谈谈JVM内存
  • 原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/14355492.html
Copyright © 2020-2023  润新知