QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#628391#8080. Pa?sWorDFoedere0WA 1ms3848kbC++204.1kb2024-10-10 19:57:302024-10-10 19:57:36

Judging History

This is the latest submission verdict.

  • [2024-10-10 19:57:36]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 3848kb
  • [2024-10-10 19:57:30]
  • Submitted

answer

#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
typedef pair<int, int> PII;
int mod = 998244353;
const int N = 100010;
int n;
int dp[2][110][10];
int a[N];
int ty[N];
int into(char k)
{
    if (k >= '0' && k <= '9')
        return 0;
    if (k >= 'A' && k <= 'Z')
        return 1;
    if (k >= 'a' && k <= 'z')
        return 2;
    return 3;
}
int get(char k)
{
    if (k >= '0' && k <= '9')
        return k - '0';
    if (k >= 'A' && k <= 'Z')
        return k - 'A' + 10;
    if (k >= 'a' && k <= 'z')
        return k - 'a' + 36;
    return 63;
}
int getmod(int x)
{
    if (x >= mod)
    {
        x -= mod;
    }
    return x;
}
void solve()
{
    cin >> n;
    string s;
    // scanf("%s", s + 1);
    s = ' ' + s;
    //  cout << get('Z') << endl;
    for (int i = 1; i <= n; i++)
    {
        a[i] = get(s[i]);
        ty[i] = into(s[i]);
    }
    int now = 0;
    dp[0][0][0] = 1;
    for (int i = 1; i <= n; i++)
    {
        int t = now ^ 1;
        if (ty[i] <= 1)
        {
            for (int k = 0; k < 8; k++)
            {
                for (int j = 0; j <= 61; j++)
                {
                    if (a[i] == j)
                        continue;
                    dp[t][a[i]][k | (1 << ty[i])] += dp[now][j][k];
                    dp[t][a[i]][k | (1 << ty[i])] = getmod(dp[t][a[i]][k | (1 << ty[i])]);
                }
            }
        }
        if (ty[i] == 2)
        {
            for (int k = 0; k < 8; k++)
            {
                for (int j = 0; j <= 61; j++)
                {
                    if (a[i] != j)
                    {
                        dp[t][a[i]][k | (1 << ty[i])] += dp[now][j][k];
                        dp[t][a[i]][k | (1 << ty[i])] = getmod(dp[t][a[i]][k | (1 << ty[i])]);
                    }
                    if (a[i] - 26 != j)
                    {
                        dp[t][a[i] - 26][k | 2] += dp[now][j][k];
                        dp[t][a[i] - 26][k | 2] = getmod(dp[t][a[i] - 26][k | 2]);
                    }
                }
            }
            /*for (int k = 0; k < 8; k++)
            {
                for (int j = 0; j <= 61; j++)
                {
                    if (a[i] - 26 == j)
                        continue;
                    dp[t][a[i] - 26][k | 2] += dp[now][j][k];
                    dp[t][a[i] - 26][k | 2] = getmod(dp[t][a[i] - 26][k | 2]);
                }
            }*/
        }
        if (ty[i] == 3)
        {
            for (int k = 0; k < 8; k++)
            {
                for (int j = 0; j <= 61; j++)
                {
                    for (int r = 0; r <= 9; r++)
                    {
                        if (r == j)
                            continue;
                        dp[t][r][k | 1] += dp[now][j][k];
                        dp[t][r][k | 1] = getmod(dp[t][r][k | 1]);
                    }
                    for (int r = 10; r <= 35; r++)
                    {
                        if (r == j)
                            continue;
                        dp[t][r][k | 2] += dp[now][j][k];
                        dp[t][r][k | 2] = getmod(dp[t][r][k | 2]);
                    }
                    for (int r = 36; r <= 61; r++)
                    {
                        if (r == j)
                            continue;
                        dp[t][r][k | 4] += dp[now][j][k];
                        dp[t][r][k | 4] = getmod(dp[t][r][k | 4]);
                    }
                }
            }
        }
        for (int j = 0; j < 8; j++)
        {
            for (int r = 0; r <= 62; r++)
            {
                dp[now][r][j] = 0;
            }
        }
        now = t;
    }
    int res = 0;
    for (int i = 0; i <= 61; i++)
    {
        res += dp[now][i][7];
        res = getmod(res);
    }
    cout << getmod(res) << endl;
}
signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int T = 1;
    // 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: 1ms
memory: 3848kb

input:

4
a?0B

output:

4765800

result:

wrong answer 1st lines differ - expected: '86', found: '4765800'