QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#713938#9536. Athlete Welcome Ceremonyucup-team1113WA 0ms3584kbC++203.1kb2024-11-05 20:57:412024-11-05 20:57:42

Judging History

This is the latest submission verdict.

  • [2024-11-05 20:57:42]
  • Judged
  • Verdict: WA
  • Time: 0ms
  • Memory: 3584kb
  • [2024-11-05 20:57:41]
  • Submitted

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

Details

Tip: Click on the bar to expand more detailed information

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'