이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 5, mod = 998244353;
int n, ans;
int cnt[11];
int v[11][63][63];
int f[11][63][63][63];
int tran(char c) {
if (c >= 'a' && c <= 'z') return c - 96;
else if (c >= 'A' && c <= 'Z') return c - 38;
else if (c >= '0' && c <= '9') return c + 5;
else return 0;
}
string s[maxn];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> s[i];
s[i + n] = s[i];
reverse(s[i + n].begin(), s[i + n].end());
}
n *= 2;
sort(s + 1, s + 1 + n);
n = unique(s + 1, s + n + 1) - s - 1;//去重
for (int i = 1; i <= n; i++) {
cnt[s[i].size()]++;
v[s[i].size()][tran(s[i][0])][tran(s[i][s[i].size() - 1])]++;
}
for (int len = 3; len <= 10; len++) {
if (!cnt[len]) continue;
for (int l = 1; l <= 62; l++) {
for (int i = 1; i <= 62; i++) {
if (!v[len][l][i]) continue;
for (int j = 1; j <= 62; j++) {
if (!v[len][l][j]) continue;
for (int k = 1; k <= 62; k++) {
if (!v[len][l][k]) continue;
(f[len][i][j][k] += 1ll * v[len][l][i] * v[len][l][j] % mod * v[len][l][k] % mod) %= mod;
}
}
}
}
for (int l = 1; l <= 62; l++) {
for (int i = 1; i <= 62; i++) {
for (int j = 1; j <= 62; j++) {
for (int k = 1; k <= 62; k++) {
(ans += 1ll * f[len][i][j][k] * f[len][i][j][l] % mod * f[len][i][k][l] % mod * f[len][j][k][l] % mod) %= mod;
}
}
}
}
}
cout << ans;
return 0;
}
# | 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... |