QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#713938 | #9536. Athlete Welcome Ceremony | ucup-team1113 | WA | 0ms | 3584kb | C++20 | 3.1kb | 2024-11-05 20:57:41 | 2024-11-05 20:57:42 |
Judging History
answer
#include <bits/stdc++.h>
#define lowbit(x) x&(-x)
using namespace std;
using i64 = long long;
using pii = std::pair<int, int>;
constexpr int mod = 998244353;
constexpr int MAXN_32 = 2e9;
constexpr i64 MAXN_64 = 1e18;
template <typename T>
void debug(T x) {
cerr << x << "\n";
}
template <typename T, typename... Args>
void debug(T x, Args... args) {
cerr << x << " ";
debug(args...);
}
void solve() {
int n, q, cnt = 0;
cin >> n >> q;
string s;
cin >> s, s = " " + s;
vector f(n + 5, vector(n + 5, vector(3, 0ll)));
if(s[1] == '?') {
cnt++;
f[1][0][0] = f[0][1][1] = f[0][0][2] = 1;
} else {
int now = s[1] - 'a';
f[0][0][now] = 1;
}
for(int i = 2; i <= n; i++) {
vector nf(n + 5, vector(n + 5, vector(3, 0ll)));
if(s[i] == '?') {
for(int lst = 0; lst < 3; lst++) {
for(int now = 0; now < 3; now++) {
if(lst == now) continue;
for(int j = 0; j <= cnt; j++) {
for(int k = 0; k <= cnt; k++) {
if(j + k > cnt) continue;
if(now == 0) nf[j + 1][k][now] += f[j][k][lst];
if(now == 1) nf[j][k + 1][now] += f[j][k][lst];
if(now == 2) nf[j][k][now] += f[j][k][lst];
}
}
}
}
cnt++;
} else {
int now = s[i] - 'a';
for(int lst = 0; lst < 3; lst++) {
if(lst == now) continue;
for(int j = 0; j <= cnt; j++) {
for(int k = 0; k <= cnt; k++) {
if(j + k > cnt) continue;
nf[j][k][now] += f[j][k][lst];
}
}
}
}
f = std::move(nf);
}
vector sum(n + 1, vector(n + 1, 0ll));
for(int i = 0; i <= n; i++) {
for(int j = 0; j <= n; j++) {
for(int now = 0; now < 3; now++) {
sum[i][j] += f[i][j][now];
}
}
}
for(int i = 0; i <= n; i++) {
for(int j = 0; j <= n; j++) {
cout << sum[i][j] << " \n"[j == n];
}
}
vector pre(n + n + 1, vector(n + 1, 0ll));
for(int i = 0; i <= n + n; i++) {
for(int j = 0; j <= n; j++) {
int tx = i - j;
if(j) pre[i][j] = pre[i][j - 1];
if(tx >= 0 && tx <= n) {
pre[i][j] += sum[tx][j];
}
}
}
while(q--) {
int a, b, c;
cin >> a >> b >> c;
i64 ans = 0;
for(int i = a + b; i >= max(cnt - c, 0); i--) {
i64 res = 0;
if(i - a - 1 >= 0) res = pre[i][i - a - 1];
ans += pre[i][b] - res;
}
cout << ans << "\n";
}
}
int main() {
std::cin.tie(nullptr)->sync_with_stdio(false);
int t = 1;
// std::cin >> t;
while(t--) solve();
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3584kb
input:
6 3 a?b??c 2 2 2 1 1 1 1 0 2
output:
0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 1 1
result:
wrong answer 1st lines differ - expected: '3', found: '0 1 0 0 0 0 0'