Submission #1170468

#TimeUsernameProblemLanguageResultExecution timeMemory
1170468mnbvcxz123Cubeword (CEOI19_cubeword)C++20
100 / 100
490 ms31292 KiB
#include<bits/stdc++.h> using namespace std; using ll=long long; constexpr int mod=998244353; int f(char x){ if(x>='a' and x<='z')return x-'a'; if(x>='A' and x<='Z')return x-'A'+26; return x-'0'+52; } int cnt[11][62][62]; ll dp[11][62][62][62]; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n; cin>>n; set<string>sets; for(int i=1;i<=n;++i){ string s; cin>>s; if(!sets.count(s)){ string t=s; reverse(t.begin(),t.end()); ++cnt[s.size()][f(s[0])][f(s.back())]; if(s!=t)++cnt[s.size()][f(s.back())][f(s[0])]; sets.insert(s); sets.insert(t); } } for(int i=3;i<=10;++i) for(int j=0;j<62;++j) for(int k=0;k<62;++k) for(int l=0;l<62;++l){ for(int m=0;m<62;++m) dp[i][j][k][l]+=1ll*cnt[i][j][m]*cnt[i][k][m]*cnt[i][l][m]; dp[i][j][k][l]%=mod; } ll res=0; for(int i=3;i<=10;++i) for(int j=0;j<62;++j) for(int k=0;k<62;++k) for(int l=0;l<62;++l){ ll tmp=0; for(int m=0;m<62;++m) tmp+=dp[i][j][k][m]*dp[i][j][l][m]%mod*dp[i][k][l][m]%mod; res+=tmp*dp[i][j][k][l]%mod; res%=mod; } cout<<res<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...