Submission #1246238

#TimeUsernameProblemLanguageResultExecution timeMemory
1246238KindaGoodGamesCubeword (CEOI19_cubeword)C++20
0 / 100
1137 ms14932 KiB
// #pragma GCC optimize("O3, unroll-loops, Ofast") #include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define tiii tuple<char,char,cg> int mod = 998244353; vector<vector<vector<int32_t>>> cnt(8, vector<vector<int32_t>>(7, vector<int32_t>(7))); vector<int> cur(8); int pt; int res = 0; vector<pii> edges; set<pii> edgesSet; void gen(int n){ if(n == 0){ for(int l = 3; l <= 10; l++){ int cp = 1; for(auto e : edges){ int v = cnt[l-3][cur[e.first]][cur[e.second]]; cp *=v; cp %= mod; if(cp == 0) break; } res += cp; res %= mod; } return; } for(int i = 0; i < 7; i++){ cur[pt++] = i; gen(n-1); cur[--pt] = 0; } } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n; cin >> n; // vector<tiii> arr(n); set<string> occ; for(int i = 0; i < n; i++){ string s; cin >> s; string r = s; reverse(r.begin(),r.end()); // arr[i] = {s.size(), s[0]-'a', s.back()-'a'}; if(occ.count(r) || occ.count(s)) continue; occ.insert(s); occ.insert(r); char ind1 = s[0]-'a'; char ind2 = s.back()-'a'; cnt[s.size()-3][ind1][ind2]++; if(r != s){ cnt[r.size()-3][r[0]-'a'][r.back()-'a']++; } } auto start = clock(); for(int v = 0; v < 4; v++){ auto ins = [&](int a, int b){ if(a > b) swap(a,b); edgesSet.insert({a,b}); }; ins(v, (v+1)%4); ins(v, (v+3)%4); ins(v, v+4); ins(4+v, 4+((v+1)%4)); ins(4+v, 4+((v+3)%4)); } edges = vector<pii>(edgesSet.begin(),edgesSet.end()); gen(8); cout << res << endl; auto end = clock(); cout << end - start << "ms elapsed" << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...