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;
}