A
200/8=25
B
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; ++i)
using namespace std;
typedef long long ll;
const int N = 1e6 + 7;
bool isPrime(int n) {
for (int i = 2, x = sqrt(n); i <= x; ++i) {
if (n % i == 0) return 0;
}
return 1;
}
bool ok(int n) {
while (n) {
if (n % 10 != 2 and n % 10 != 3 and n % 10 != 5 and n % 10 != 7) {
return 0;
}
n /= 10;
}
return 1;
}
int main() {
int cnt = 0;
rep(i, 2, 20210605) if (ok(i) and isPrime(i))++ cnt;
printf("%d\n", cnt); // 1903
return 0;
} C
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; ++i)
typedef long long ll;
using namespace std;
const int N = 5e5 + 7;
int nextDay(int n) {
int y = n / 10000;
int d = n % 100;
int m = n / 100 % 100;
if (m == 12 and d == 31)
y += 1, m = 1, d = 1;
else if (m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 ||
m == 12) {
if (d == 31)
m += 1, d = 1;
else
++d;
} else if (m == 2) {
if (y % 4 == 0) {
if (d == 29)
m += 1, d = 1;
else
d += 1;
} else {
if (d == 28)
m += 1, d = 1;
else
d += 1;
}
} else {
if (d == 30)
m += 1, d = 1;
else
d += 1;
}
return y * 10000 + m * 100 + d;
}
bool chk(int n) {
int res = 0;
while (n) {
res += n % 10;
n /= 10;
}
int t = sqrt(n);
return res == t * t;
}
int main() {
int cnt = 0;
for (int i = 20010101; i <= 20211231; i = nextDay(i))
if (chk(i)) ++cnt;
cout << cnt << endl; // 977
return 0;
} D
E
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; ++i)
using namespace std;
typedef long long ll;
const int N = 1e6 + 7;
int main() {
string s;
cin >> s;
for (char &c : s)
if (islower(c)) c += 'A' - 'a';
cout << s;
return 0;
} F
G
#include <bits/stdc++.h>
#define rep(i, l, r) for (int i = l; i <= r; ++i)
using namespace std;
typedef long long ll;
ll f[65][55];
int num[65], k;
ll dfs(int len, int cnt, bool limit) {
if (!len) return cnt == k; // 到达终态,判断
if (cnt > k) return 0; // 剪枝
if (!limit && ~f[len][cnt])
return f[len][cnt]; // 如果未达到终态,且已计算过,即可复用
ll &x = f[len][cnt], ans(0);
int ed = limit ? num[len] : 1; // 边界
for (int i = 0; i <= ed; ++i) {
ans += dfs(len - 1, cnt + (i == 1), limit && i == ed);
}
if (!limit) x = ans; // 记录复用
return ans;
}
int main() {
int len(0);
ll n;
scanf("%lld%d", &n, &k);
memset(f, -1, sizeof f);
while (n) {
num[++len] = n & 1;
n >>= 1;
}
cout << dfs(len, 0, true) << '\n';
return 0;
} 
京公网安备 11010502036488号