AtCoder Beginner Contest 096

A - Day of Takahashi

输入a b,问从1月1号到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) cout << a - 1 << endl;
    else
        cout << a << endl;
    return 0;
}

B - Maximum Sum

给出a b c d

问每次将abc中的一个数x2,然后替换这个数,一共操作d次,最后的和最大是多少

直接选择最大的数操作d次即可

#include<bits/stdc++.h>

using namespace std;

const int N = 1e6 + 5;
typedef long long LL;
int a, b, c, k;
int main(){
    cin >> a >> b >> c >> k;
    int sum = a + b + c;
    int tmp = max({a, b, c});
    while(k--){
        tmp *= 2;
    }
    sum += -max({a, b, c}) + tmp;
    cout << sum << endl;
    return 0;
}

C - Grid Repainting 2

输入一个NxM的矩阵 #代表要涂色,.代表不用

每次涂色时都必须涂上下左右连续的两个方格,问能否完成涂色

直接看每个#旁边有没有#即可

#include <bits/stdc++.h>

using namespace std;

const int N = 1e3 + 5;
typedef long long LL;
int n, m, f[2][4] = {0, 0, 1, -1, 1, -1, 0, 0};
char mp[N][N];
int main() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> mp[i][j];
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            if (mp[i][j] == '.') continue;
            int flag = 0;
            for (int k = 0; k < 4; k++) {
                int x = i + f[0][k], y = j + f[1][k];
                if(x>=1&&x<=n&&y>=1&&y<=m){
                    if (mp[x][y] == '#') flag = 1;
                }
            }
            if(!flag){
                cout << "No" << endl;
                return 0;
            }
        }
    }
    cout << "Yes" << endl;
    return 0;
}

D - Five, Five Everywhere

要求输出n个数,这n个数满足都是质数,且任取其中5个数,他们的和都是合数,每个数都不能大于55555

注意到,5乘任何数,尾数要么是0要么是5,也就是说必然是合数,那么直接取尾数相同的n个质数即可,这样可以保证尾数是0或5

#include <bits/stdc++.h>

using namespace std;

const int N = 1e6 + 5;
typedef long long LL;
int n;
bool is_prime(int x) {
    if (x < 2) return false;  // 1不是素数
    for (int i = 2; i <= x / i;
         ++i)  // 从2循环到sqrt(x),但是循环进行条件不写i <=
               // sqet(x),因为太慢;不写i * i <= x,因为可能有溢出的风险
        if (x % i == 0) return false;
    return true;
}
int main() {
    cin >> n;
    int cnt = 0;
    for (int i = 2; i <= 55555; i++) {
        if (i % 10 == 3) {
            if (is_prime(i)) {
                cnt++;
                cout << i << ' ';
                if (cnt == n) break;
            }
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/dyhaohaoxuexi/p/14374605.html