ABCDEGHKL题个人正确代码。
我是验题人。
A
Python Code
import sys
input = sys.stdin.readline
P = 998244353
di = [[1, 1, 1, 0, 1, 1, 1],
[0, 0, 1, 0, 0, 1, 0],
[1, 0, 1, 1, 1, 0, 1],
[1, 0, 1, 1, 0, 1, 1],
[0, 1, 1, 1, 0, 1, 0],
[1, 1, 0, 1, 0, 1, 1],
[1, 1, 0, 1, 1, 1, 1],
[1, 0, 1, 0, 0, 1, 0],
[1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 0, 1, 1]]
inv100 = pow(100, P - 2, P)
t = int(input())
for _ in range(t):
C = int(input())
ps = list(map(int, input().split()))
res = [0 for i in range(10)]
for d in range(10):
p1 = 1
for i in range(7):
if di[d][i]:
p1 = p1 * ps[i] % P * inv100 % P
else:
p1 = p1 * (1 + P - ps[i] * inv100 % P) % P
res[d] = p1
f = [1 for i in range(C + 1)]
for v in range(C + 1):
x = v
p = 1000
for i in range(4):
f[v] = f[v] * res[x // p] % P
x %= p
p //= 10
ans = 0
for v in range(C + 1):
ans = (ans + f[v] * f[C - v] % P) % P
print(ans)
C++ Code
#include "bits/stdc++.h"
using namespace std;
using i64 = int64_t;
constexpr int P = 998244353;
i64 power(i64 a, int b, int p = P) {
i64 r = 1;
for (; b > 0; b >>= 1, a = a * a % p) {
if (b & 1) {
r = r * a % p;
}
}
return r;
}
const i64 inv100 = power(100, P - 2);
short di[10][7] = {
{1, 1, 1, 0, 1, 1, 1},
{0, 0, 1, 0, 0, 1, 0},
{1, 0, 1, 1, 1, 0, 1},
{1, 0, 1, 1, 0, 1, 1},
{0, 1, 1, 1, 0, 1, 0},
{1, 1, 0, 1, 0, 1, 1},
{1, 1, 0, 1, 1, 1, 1},
{1, 0, 1, 0, 0, 1, 0},
{1, 1, 1, 1, 1, 1, 1},
{1, 1, 1, 1, 0, 1, 1}
};
void solve() {
int c;
cin >> c;
vector<int> ps(7);
for (int &pi : ps) {
cin >> pi;
}
vector<i64> g(10);
for (int d = 0; d < 10; d++) {
i64 p1 = 1;
for (int i = 0; i < 7; i++) {
if (di[d][i]) {
p1 = p1 * ps[i] % P * inv100 % P;
} else {
p1 = p1 * (1 + P - ps[i] * inv100 % P) % P;
}
}
g[d] = p1;
}
vector<i64> f(c + 1, 1);
for (int v = 0; v <= c; v++) {
int x = v;
for (int i = 0, p = 1000; i < 4; i++, p /= 10) {
f[v] = f[v] * g[x / p] % P;
x %= p;
}
}
i64 ans = 0;
for (int v = 0; v <= c; v++) {
ans = (ans + f[v] * f[c - v] % P) % P;
}
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
B
Python Code
import sys
input = sys.stdin.readline
P = 998244353
N = 200000
fac = [0] * (N + 1)
fac[0] = 1
for i in range(1, N + 1):
fac[i] = fac[i - 1] * i % P
t = int(input())
for _ in range(t):
n = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
cnt = 0
mn = min(b)
for x in a:
if x > mn:
cnt += 1
print(fac[cnt] * fac[n - cnt] % P)
C++ Code
#include "bits/stdc++.h"
using namespace std;
using i64 = int64_t;
constexpr int P = 998244353;
constexpr int N = 200000;
i64 fac[N + 1];
void solve() {
int n;
cin >> n;
vector<int> a(n), b(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < n; i++) {
cin >> b[i];
}
int cnt = 0;
int mn = *min_element(b.begin(), b.end());
for (int x : a) {
if (x > mn) {
cnt++;
}
}
cout << fac[cnt] * fac[n - cnt] % P << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
fac[0] = 1;
for (int i = 1; i <= N; i++) {
fac[i] = fac[i - 1] * i % P;
}
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
C
签到。
Python Code
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
n = int(input())
a = list(map(int, input().split()))
print((n - 2) * max(a) + a[0] + a[n - 1])
C++ Code
#include "bits/stdc++.h"
using namespace std;
using i64 = int64_t;
void solve() {
int n;
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
cout << i64(n - 2) * *max_element(a.begin(), a.end()) + a[0] + a[n - 1] << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
D
二分。
Python Code
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
n, k = map(int, input().split())
a = list(map(int, input().split()))
if sum(1 for x in a if x > 0) <= k:
print(0)
else:
def check(t):
time = [0 for i in range(n)]
used = 0
best = -1
mx = -1
for i in range(n):
if a[i] == 0:
continue
if mx < i:
used += 1
mx = max(best, i + a[i])
for j in range(i + 1, min(n, mx + 1)):
time[j] = 1
else:
if time[i] < t:
for j in range(mx + 1, min(n, i + a[i] + 1)):
time[j] = time[i] + 1
mx = max(mx, i + a[i])
else:
best = max(best, i + a[i])
return used <= k
lo, hi, ans = 1, n, -1
while lo <= hi:
mid = (lo + hi) // 2
if check(mid):
hi = mid - 1
ans = mid
else:
lo = mid + 1
print(ans)
C++ Code
#include "bits/stdc++.h"
using namespace std;
void solve() {
int n, k;
cin >> n >> k;
vector<int> a(n);
int cnt = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
cnt += a[i] > 0;
}
if (cnt <= k) {
cout << "0\n";
return;
}
auto check = [&](int t) {
vector<int> time(n);
int used = 0, mx = -1, best = -1;
for (int i = 0; i < n; ++i) {
if (!a[i]) {
continue;
}
if (mx < i) {
used++;
mx = max(best, i + a[i]);
for (int j = i + 1; j < min(n, mx + 1); j++) {
time[j] = 1;
}
} else {
if (time[i] < t) {
for (int j = mx + 1; j < min(n, i + a[i] + 1); j++) {
time[j] = time[i] + 1;
}
mx = max(mx, i + a[i]);
} else {
best = max(best, i + a[i]);
}
}
}
return used <= k;
};
int lo = 1, hi = n, ans = -1;
while (lo <= hi) {
int mid = (lo + hi) / 2;
if (check(mid)) {
hi = mid - 1;
ans = mid;
} else {
lo = mid + 1;
}
}
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
E
签到。
Python Code
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
n, k = map(int, input().split())
a = list(map(int, input().split()))
ans = max(k + a[n - 1], k + a[0])
for i in range(n - 1):
ans = max(ans, a[i] + a[i + 1])
print(ans)
C++ Code
#include "bits/stdc++.h"
using namespace std;
using i64 = int64_t;
void solve() {
int n, k;
cin >> n >> k;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
int ans = max(k + a[n - 1], k + a[0]);
for (int i = 0; i + 1 < n; i++) {
ans = max(ans, a[i] + a[i + 1]);
}
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
G
考虑以若干连续 结尾的数。
Python Code
import sys
input = sys.stdin.readline
def rev(x):
return int(str(x)[::-1])
t = int(input())
for _ in range(t):
l, r = map(int, input().split())
ans = rev(r)
if r > l:
ans = max(ans, rev(r - 1))
p = 10
while p <= r:
x = r // p * p - 1
if l <= x <= r:
ans = max(ans, rev(x))
p *= 10
print(ans)
C++ Code
#include "bits/stdc++.h"
using namespace std;
using i64 = int64_t;
i64 rev(i64 x) {
string s = to_string(x);
reverse(s.begin(), s.end());
return stoll(s);
}
void solve() {
i64 l, r;
cin >> l >> r;
i64 ans = rev(r);
if (r > l) {
ans = max(ans, rev(r - 1));
}
for (i64 p = 10; p <= r; p *= 10) {
i64 x = r / p * p - 1;
if (x >= l && x <= r) {
ans = max(ans, rev(x));
}
}
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
H
dp。
Python Code
import sys
input = sys.stdin.readline
P = 998244353
t = int(input())
for _ in range(t):
n = int(input())
a = list(map(int, input().split()))
dp = [0 for i in range(n + 1)]
pre = [0 for i in range(n + 1)]
dp[0] = 1
pre[0] = 1
last = [0 for i in range(32)]
l = 1
for i in range(n):
for b in range(32):
if a[i] >> b & 1:
if last[b] + 1 > l:
l = last[b] + 1
left = 0
j = l - 2
if j >= 0:
left = pre[j]
dp[i + 1] = ((pre[i] - left) % P + P) % P
pre[i + 1] = (pre[i] + dp[i + 1]) % P
for b in range(32):
if a[i] >> b & 1:
last[b] = i + 1
print(dp[n])
K
签到。
Python Code
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
n = int(input())
if n == 1:
print("YES\n1")
elif n == 3:
print("YES\n1 2 3")
else:
print("NO")
C++ Code
#include "bits/stdc++.h"
using namespace std;
using i64 = int64_t;
void solve() {
int n;
cin >> n;
if (n == 1) {
cout << "YES\n1\n";
} else if (n == 3) {
cout << "YES\n1 2 3\n";
} else {
cout << "NO\n";
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
solve();
}
return 0;
}
L
签到。
Python Code
import sys
input = sys.stdin.readline
n = int(input())
if n % 10 == 0:
print(1)
elif n % 10 == 5:
print(2)
elif n % 10 % 2 == 0:
print(5)
else:
print(10)
C++ Code
#include "bits/stdc++.h"
using namespace std;
using i64 = int64_t;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
if (n % 10 == 0) {
cout << "1\n";
} else if (n % 10 == 5) {
cout << "2\n";
} else if (n % 10 % 2 == 0) {
cout << "5\n";
} else {
cout << "10\n";
}
return 0;
}

京公网安备 11010502036488号