Submission #446280

#TimeUsernameProblemLanguageResultExecution timeMemory
446280benedict0724Cubeword (CEOI19_cubeword)C++17
100 / 100
432 ms27076 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll cnt[62][62][11]; ll Pre[62][62][62][11]; ll ans = 0; const ll mod = 998244353; map<string, int> M; int f(char c) { if('a' <= c && c <= 'z') return (int)(c - 'a'); if('A' <= c && c <= 'Z') return (int)(c - 'A' + 26); return c - '0' + 52; } int main() { int n; cin >> n; for(int i=1;i<=n;i++) { string s; cin >> s; string p = s; reverse(p.begin(), p.end()); if(M[p]) continue; M[s] = 1; int t = s.size(); int a = f(s[0]); int b = f(s[t-1]); bool flag = true; for(int i=0;i<t;i++) { if(s[i] != s[t-i-1]) flag = false; } if(a != b) { cnt[a][b][t]++; cnt[b][a][t]++; } else if(flag) cnt[a][a][t]++; else cnt[a][a][t] += 2; } for(int t=3;t<=10;t++) { for(int i=0;i<62;i++) { for(int j=i;j<62;j++) { for(int k=j;k<62;k++) { for(int p=0;p<62;p++) { ll tmp = 1; tmp *= cnt[i][p][t]; tmp %= mod; tmp *= cnt[j][p][t]; tmp %= mod; tmp *= cnt[k][p][t]; tmp %= mod; Pre[i][j][k][t] += tmp; } } } } } for(int t=3;t<=10;t++) { for(int a=0;a<62;a++) { for(int b=a;b<62;b++) { for(int c=b;c<62;c++) { for(int d=c;d<62;d++) { ll tmp = 1; tmp *= Pre[a][b][c][t]; tmp %= mod; tmp *= Pre[a][b][d][t]; tmp %= mod; tmp *= Pre[a][c][d][t]; tmp %= mod; tmp *= Pre[b][c][d][t]; tmp %= mod; if(a == d) tmp *= 1; else if(a == c || b == d) tmp *= 4; else if(a == b && c == d) tmp *= 6; else if(a == b || b == c || c == d) tmp *= 12; else tmp *= 24; ans = (ans + tmp)%mod; } } } } } cout << ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...