Submission #1261795

#TimeUsernameProblemLanguageResultExecution timeMemory
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...