제출 #1261795

#제출 시각아이디문제언어결과실행 시간메모리
1261795vtnooCubeword (CEOI19_cubeword)C++20
100 / 100
1071 ms17992 KiB
#include <bits/stdc++.h>

using namespace std;

const int mod=998244353, N=62;
int cnt[11][62][62];
long long dp[N][N][N];
set<string> sc;

int main(){
    int n;cin>>n;
    for(int i=0;i<n;i++){
        string s;
        cin>>s;
        if(sc.count(s))continue;
        string s_r=s;
        reverse(s_r.begin(), s_r.end());
        sc.insert(s);
        int a, b;
        if(isdigit(s.front())){
            a=s.front()-'0';
        }else{
            a=s.front()-(isupper(s.front())?'A':'a');
        }
        if(isdigit(s.back())){
            b=s.back()-'0';
        }else{
            b=s.back()-(isupper(s.back())?'A':'a');
        }
        int ad_a=(isupper(s.front())?26:0), ad_b=(isupper(s.back())?26:0);
        int dig_a=(isdigit(s.front())?52:0), dig_b=(isdigit(s.back())?52:0);
        cnt[(int)s.size()][a+ad_a+dig_a][b+ad_b+dig_b]++;
        if(s!=s_r){
            cnt[(int)s.size()][b+ad_b+dig_b][a+ad_a+dig_a]++;
            sc.insert(s_r);
        }
    }
    long long ans=0;
    for(int len=3;len<=10;len++){
        memset(dp, 0, sizeof(dp));
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++){
                for(int k=0;k<N;k++){
                    for(int l=0;l<N;l++){
                        dp[i][j][k]+=(((cnt[len][i][l]*cnt[len][j][l])%mod)*cnt[len][k][l])%mod;
                        dp[i][j][k]%=mod;
                    }   
                }
            }
        }  
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++){
                for(int k=0;k<N;k++){
                    for(int l=0;l<N;l++){
                        long long cur=dp[i][j][k];
                        cur%=mod;
                        cur*=dp[j][k][l];
                        cur%=mod;
                        cur*=dp[i][k][l];
                        cur%=mod;
                        cur*=dp[i][j][l];
                        cur%=mod;
                        ans+=cur;
                        ans%=mod;
                    }   
                }
            }
        }    
    }
    cout<<ans%mod<<endl;
}   
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...