# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1231004 | altern23 | Cubeword (CEOI19_cubeword) | C++20 | 1102 ms | 32492 KiB |
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<ll, ll>
#define fi first
#define sec second
#define ld long double
const int MAXN = 150;
const ll INF = 1e18;
const int MOD = 998244353;
ll dp[15][64][64][64];
ll cnt[15][64][64];
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int tc = 1;
// cin >> tc;
for(;tc--;){
ll N; cin >> N;
auto conv = [&](char c){
if('A' <= c && c <= 'Z') return (c - 'A');
if('a' <= c && c <= 'z') return 26 + (c - 'a');
if('0' <= c && c <= '9') return 52 + (c - '0');
};
map<string, bool> vis;
for(int i = 1; i <= N; i++){
string s; cin >> s;
if(!vis[s]) cnt[(int)s.size()][conv(s[0])][conv(s.back())]++;
vis[s] = 1;
string t = s;
reverse(t.begin(), t.end());
if(!vis[t]) cnt[(int)s.size()][conv(t[0])][conv(t.back())]++;
vis[t] = 1;
}
ll ans = 0;
for(int len = 3; len <= 10; len++){
for(int j = 0; j <= 62; j++){
for(int k = 0; k < 62; k++){
for(int l = 0; l < 62; l++){
for(int zz = 0; zz < 62; zz++){
dp[len][j][k][l] += cnt[len][j][zz] * cnt[len][k][zz] % MOD * cnt[len][l][zz] % MOD;
dp[len][j][k][l] %= MOD;
}
}
}
}
for(int j = 0; j <= 62; j++){
for(int k = 0; k < 62; k++){
for(int l = 0; l < 62; l++){
if(!dp[len][j][k][l]) continue;
for(int zz = 0; zz < 62; zz++){
ans += dp[len][j][k][l] * dp[len][j][k][zz] % MOD * dp[len][j][zz][l] % MOD * dp[len][zz][k][l] % MOD;
ans %= MOD;
}
}
}
}
}
cout << ans << "\n";
}
}
/*
*/
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |