제출 #1273455

#제출 시각아이디문제언어결과실행 시간메모리
1273455cow123Cubeword (CEOI19_cubeword)C++20
0 / 100
188 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) * 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...