제출 #1277462

#제출 시각아이디문제언어결과실행 시간메모리
1277462not_amirCubeword (CEOI19_cubeword)C++20
100 / 100
1068 ms23212 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("unroll-loops") typedef long long ll; constexpr int MAX = 62, MOD = 998'244'353; int ctoi(char c) { if ('0' <= c && c <= '9') return c - '0'; if ('a' <= c && c <= 'z') return 10 + c - 'a'; return 10 + 'z' - 'a' + 1 + c - 'A'; } int H[11][MAX][MAX], cnt[11][MAX][MAX][MAX]; int main() { cin.tie(nullptr)->sync_with_stdio(false); int n; cin >> n; unordered_map<string, bool> in; for (int i = 0; i < n; i++) { string s; cin >> s; if (in[s]) continue; string rs = s; reverse(s.begin(), s.end()); in[s] = in[rs] = true; int a = ctoi(s[0]), b = ctoi(s.back()); H[s.length()][a][b]++; if (s != rs) H[s.length()][b][a]++; } ll res = 0; for (int l = 3; l <= 10; l++) { for (int i = 0; i < MAX; i++) for (int j = 0; j < MAX; j++) for (int k = 0; k < MAX; k++) for (int w = 0; w < MAX; w++) (cnt[l][i][j][k] += 1ll * H[l][w][i] * H[l][w][j] % MOD * H[l][w][k] % MOD) %= MOD; for (int i = 0; i < MAX; i++) { for (int j = 0; j < MAX; j++) { for (int k = 0; k < MAX; k++) { for (int w = 0; w < MAX; w++) { res = (res + 1ll * cnt[l][j][k][w] * cnt[l][i][k][w] % MOD * cnt[l][i][j][w] % MOD * cnt[l][i][j][k] % MOD) % MOD; } } } } } cout << res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...