Submission #1273458

#TimeUsernameProblemLanguageResultExecution timeMemory
1273458cow123Cubeword (CEOI19_cubeword)C++20
0 / 100
186 ms17000 KiB
#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i = a; i < b;++i)
#define pb push_back
#define int long long
using namespace std;
const int M = 998244353;
char skaluj[1000];
int pot[5][5];
int32_t main(){
    cin.tie(0);
    ios_base::sync_with_stdio(0);
    int n;
    cin>>n;
    set<string> S[11];
    FOR(i,0,n){
        string W;
        cin>>W;
        S[W.size()].insert(W);
        reverse(W.begin(),W.end());
        S[W.size()].insert(W);
    }
    pot[0][0] = 1;
    pot[0][1] = 6;
    pot[1][0] = 4;
    pot[1][1] = 12;
    pot[2][0] = 12;
    pot[2][1] = 24; 
    FOR(i,0,10){
        char c = '0' + i;
        skaluj[c] = i;
    }
    FOR(i,0,26){
        char c = 'a' + i;
        skaluj[c] = i + 10;
    }
    FOR(i,0,26){
        char c = 'A' + i;
        skaluj[c] = i + 36;
    }
    int suma = 0;
    FOR(i,3,11){
        if(S[i].size() == 0){continue;}
        int dp[64][64][64];
        int zlicz[64][64];
        FOR(j,0,64){
            FOR(k,0,64){
                FOR(l,0,64){
                    dp[j][k][l] = zlicz[j][k] = 0;
                }
            }
        }
        for(auto y : S[i]){
            int x1 = skaluj[y[0]];
            int y1 = skaluj[y[i - 1]];
            zlicz[x1][y1]++;
        }
        FOR(j,0,64){
            FOR(k,j,64){
                FOR(l,k,64){
                    FOR(m,0,64){
                        dp[j][k][l] = (dp[j][k][l] + zlicz[j][m] * zlicz[k][m] * zlicz[l][m]) % M;
                    }
                }
            }
        }
        FOR(j,0,64){
            FOR(k,j,64){
                FOR(l,k,64){
                    FOR(m,l,64){
                        int cnt = 0,cnt1 = 0;
                        if(j != k){++cnt;}
                        if(k != l){++cnt1;}
                        if(l != m){++cnt;}
                        suma = (suma + ((((dp[k][l][m] * dp[j][l][m]) % M * (dp[j][k][m] * dp[j][k][l])) % M) % M ) * pot[cnt][cnt1]) % M;
                    }
                }
            }
        }
    }
    cout<<suma;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...