Submission #1246189

#TimeUsernameProblemLanguageResultExecution timeMemory
1246189KindaGoodGamesCubeword (CEOI19_cubeword)C++20
0 / 100
1180 ms407652 KiB
#include<bits/stdc++.h> using namespace std; #define pii pair<int,int> #define tiii tuple<int,int,int> int mod = 998244353; vector<vector<int>> pos; vector<int> cur; void gen(int n){ if(n == 0){ pos.push_back(cur); return; } for(int i = 0; i < 7; i++){ cur.push_back(i); gen(n-1); cur.pop_back(); } } int main(){ int n; cin >> n; vector<tiii> arr(n); vector<vector<vector<int>>> cnt(8, vector<vector<int>>(26, vector<int>(26))); 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; cnt[s.size()-3][s[0]-'a'][s.back()-'a']++; if(r != s){ cnt[s.size()-3][s[0]-'a'][s.back()-'a']++; } } auto start = clock(); set<pii> edges; for(int v = 0; v < 4; v++){ auto ins = [&](int a, int b){ if(a > b) swap(a,b); edges.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)); } gen(8); int res = 0; cerr << pos.size() << endl; for(auto corners : pos){ for(int l = 3; l <= 10; l++){ int cp = 1; for(auto e : edges){ cp *= cnt[l-3][corners[e.first]][corners[e.second]]; cp %= mod; } res += cp; res %= mod; } } auto end = clock(); cout << res << endl; cerr << 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...