Submission #276903

#TimeUsernameProblemLanguageResultExecution timeMemory
276903theStaticMindCubeword (CEOI19_cubeword)C++14
100 / 100
307 ms16632 KiB
#include<bits/stdc++.h> #define pb push_back #define ii pair<int,int> #define all(x) (x).begin(),(x).end() #define sz(x) ((int)(x).size()) #define INF 100000000000000000 #define modulo 1000000007 #define mod 998244353 //#define int long long int using namespace std; const int k = 62; int dp[k][k][k]; int cnt[k][k]; map<char, int> ptr; int comb[2][2][2] = {{{24, 12}, {12, 4}}, {{12, 6}, {4, 1}}}; void clear(){ for(int a = 0; a < k; a++){ for(int b = 0; b < k; b++){ for(int c = 0; c < k; c++){ dp[a][b][c] = 0; } } } } int solve(vector<vector<int>>& cnt){ clear(); for(int a = 0; a < k; a++){ for(int b = 0; b < k; b++){ for(int f = a; f < k; f++){ for(int d = f; d < k; d++){ dp[a][f][d] = (1ll * dp[a][f][d] + 1ll * cnt[b][a] * cnt[b][f] * cnt[b][d]) % mod; } } } } int64_t ret = 0; for(int a = 0; a < k; a++){ for(int f = a; f < k; f++){ for(int g = f; g < k; g++){ for(int d = g; d < k; d++){ ret += 1ll * dp[a][f][d] * dp[f][g][d] % mod * dp[a][f][g] % mod * dp[a][g][d] % mod * comb[a==f][f==g][g==d]; ret %= mod; } } } } return ret; } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); int n; int64_t ans = 0; cin >> n; unordered_set<string> S[11]; vector<string> arr; for(int i = 0; i < n; i++){ string s; cin >> s; S[sz(s)].insert(s); reverse(all(s)); S[sz(s)].insert(s); } for(char i = 'a'; i <= 'z'; i++) ptr[i] = 0; for(char i = 'A'; i <= 'Z'; i++) ptr[i] = 0; for(char i = '0'; i <= '9'; i++) ptr[i] = 0; int ind = 0; for(auto& p : ptr){ p.second = ind++; } for(int i = 3; i <= 10; i++){ if(S[i].empty()) continue; vector<vector<int> > cnt(k, vector<int>(k, 0)); for(auto p : S[i]){ cnt[ptr[p[0]]][ptr[p[i - 1]]]++; } ans += solve(cnt); } cout << ans % mod; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...