Submission #1303113

#TimeUsernameProblemLanguageResultExecution timeMemory
1303113Jawad_Akbar_JJCubeword (CEOI19_cubeword)C++20
84 / 100
1197 ms10104 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; #define int long long int dp[100][100][100], cnt[100][100], cur, n, Ans, id[1000], mod = 998244353; vector<string> vec[50]; signed main(){ cin>>n; for (int i=1;i<=n;i++){ string s; cin>>s; int k = s.size(); vec[k].push_back(s); reverse(begin(s), end(s)); vec[k].push_back(s); for (char c : s) if (id[c] == 0) id[c] = ++cur; } for (int i=3;i<=10;i++){ sort(begin(vec[i]), end(vec[i])); vec[i].resize(unique(begin(vec[i]), end(vec[i])) - begin(vec[i])); for (string s : vec[i]) cnt[id[s[0]]][id[s[i-1]]]++; for (int i=1;i<=cur;i++){ for (int j=1;j<=cur;j++){ for (int k=1;k<=cur;k++){ dp[i][j][k] = 0; for (int l=1;l<=cur;l++) dp[i][j][k] = (dp[i][j][k] + cnt[i][l] * cnt[l][j] * cnt[l][k]) % mod; } } } for (int i=1;i<=cur;i++){ for (int j=1;j<=cur;j++) for (int k=1;k<=cur;k++) for (int l=1;l<=cur;l++) Ans = (Ans + dp[i][j][k] * dp[i][j][l] % mod * dp[i][k][l] % mod * dp[j][k][l]) % mod; } for (string s : vec[i]) cnt[id[s[0]]][id[s[i-1]]]--; } cout<<Ans % mod<<'\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...