Submission #519361

# Submission time Handle Problem Language Result Execution time Memory
519361 2022-01-26T09:01:11 Z sidon Cubeword (CEOI19_cubeword) C++17
100 / 100
1062 ms 32004 KB
#pragma GCC optimize ("O3")
#include <bits/stdc++.h>
using namespace std;
#define int int64_t
#define F(X) for(X = 0; X < B; X++)

const int B = 62, LIM = 8, M = 998244353;

int get(char c) {
	if(c < 60) return c - 48;
	return c - (c < 95 ? 55 : 61);
}
 
int n, a[LIM][B][B], b[LIM][B][B][B], res;
map<string, bool> inp;
int i, j, k, l, x;

#define c(i, j, k, l) ((b[L][i][j][l] * b[L][j][k][l]) % M)
 
int32_t main() {
	cin >> n;
	while(n--) {
		string s; cin >> s;
		i = size(s);
 
		if(inp[s]) continue;
 
		string t = s;
		reverse(begin(t), end(t));
		inp[s] = inp[t] = 1;
 
		int z = get(s[0]), y = get(end(s)[-1]);
		++a[i-3][z][y];
		if(s != t) ++a[i-3][y][z];
	}
 
	for(int L = 0; L < LIM; L++) {
		F(i) F(j) F(k) F(x)
			b[L][i][j][k] += a[L][i][x] * a[L][j][x] * a[L][k][x];

		F(i) F(j) F(k)
			b[L][i][j][k] %= M;

		F(i) F(j) F(k) F(l)
			res += (c(i, j, k, l) * c(l, k, j, i)) % M;
	}
 
	cout << res % M;
}
# Verdict Execution time Memory Grader output
1 Correct 1014 ms 29648 KB Output is correct
2 Correct 967 ms 30644 KB Output is correct
3 Correct 1062 ms 30588 KB Output is correct
4 Correct 1004 ms 30504 KB Output is correct
5 Correct 1012 ms 30500 KB Output is correct
6 Correct 1051 ms 30596 KB Output is correct
7 Correct 983 ms 30728 KB Output is correct
8 Correct 946 ms 30544 KB Output is correct
9 Correct 971 ms 30508 KB Output is correct
10 Correct 954 ms 30592 KB Output is correct
11 Correct 1006 ms 30560 KB Output is correct
12 Correct 985 ms 30548 KB Output is correct
13 Correct 974 ms 30536 KB Output is correct
14 Correct 940 ms 30532 KB Output is correct
15 Correct 993 ms 30660 KB Output is correct
16 Correct 946 ms 30580 KB Output is correct
17 Correct 975 ms 30660 KB Output is correct
18 Correct 1016 ms 30488 KB Output is correct
19 Correct 964 ms 30660 KB Output is correct
20 Correct 982 ms 30484 KB Output is correct
21 Correct 949 ms 30584 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1014 ms 29648 KB Output is correct
2 Correct 967 ms 30644 KB Output is correct
3 Correct 1062 ms 30588 KB Output is correct
4 Correct 1004 ms 30504 KB Output is correct
5 Correct 1012 ms 30500 KB Output is correct
6 Correct 1051 ms 30596 KB Output is correct
7 Correct 983 ms 30728 KB Output is correct
8 Correct 946 ms 30544 KB Output is correct
9 Correct 971 ms 30508 KB Output is correct
10 Correct 954 ms 30592 KB Output is correct
11 Correct 1006 ms 30560 KB Output is correct
12 Correct 985 ms 30548 KB Output is correct
13 Correct 974 ms 30536 KB Output is correct
14 Correct 940 ms 30532 KB Output is correct
15 Correct 993 ms 30660 KB Output is correct
16 Correct 946 ms 30580 KB Output is correct
17 Correct 975 ms 30660 KB Output is correct
18 Correct 1016 ms 30488 KB Output is correct
19 Correct 964 ms 30660 KB Output is correct
20 Correct 982 ms 30484 KB Output is correct
21 Correct 949 ms 30584 KB Output is correct
22 Correct 941 ms 31220 KB Output is correct
23 Correct 973 ms 31112 KB Output is correct
24 Correct 976 ms 31344 KB Output is correct
25 Correct 980 ms 31300 KB Output is correct
26 Correct 995 ms 31184 KB Output is correct
27 Correct 1014 ms 31280 KB Output is correct
28 Correct 1008 ms 31116 KB Output is correct
29 Correct 954 ms 31148 KB Output is correct
30 Correct 1045 ms 31276 KB Output is correct
31 Correct 967 ms 31096 KB Output is correct
32 Correct 941 ms 31300 KB Output is correct
33 Correct 914 ms 31244 KB Output is correct
34 Correct 938 ms 31120 KB Output is correct
35 Correct 909 ms 31192 KB Output is correct
36 Correct 919 ms 31304 KB Output is correct
37 Correct 924 ms 31476 KB Output is correct
38 Correct 935 ms 31172 KB Output is correct
39 Correct 907 ms 31288 KB Output is correct
40 Correct 922 ms 31096 KB Output is correct
41 Correct 913 ms 31200 KB Output is correct
42 Correct 924 ms 31228 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1014 ms 29648 KB Output is correct
2 Correct 967 ms 30644 KB Output is correct
3 Correct 1062 ms 30588 KB Output is correct
4 Correct 1004 ms 30504 KB Output is correct
5 Correct 1012 ms 30500 KB Output is correct
6 Correct 1051 ms 30596 KB Output is correct
7 Correct 983 ms 30728 KB Output is correct
8 Correct 946 ms 30544 KB Output is correct
9 Correct 971 ms 30508 KB Output is correct
10 Correct 954 ms 30592 KB Output is correct
11 Correct 1006 ms 30560 KB Output is correct
12 Correct 985 ms 30548 KB Output is correct
13 Correct 974 ms 30536 KB Output is correct
14 Correct 940 ms 30532 KB Output is correct
15 Correct 993 ms 30660 KB Output is correct
16 Correct 946 ms 30580 KB Output is correct
17 Correct 975 ms 30660 KB Output is correct
18 Correct 1016 ms 30488 KB Output is correct
19 Correct 964 ms 30660 KB Output is correct
20 Correct 982 ms 30484 KB Output is correct
21 Correct 949 ms 30584 KB Output is correct
22 Correct 941 ms 31220 KB Output is correct
23 Correct 973 ms 31112 KB Output is correct
24 Correct 976 ms 31344 KB Output is correct
25 Correct 980 ms 31300 KB Output is correct
26 Correct 995 ms 31184 KB Output is correct
27 Correct 1014 ms 31280 KB Output is correct
28 Correct 1008 ms 31116 KB Output is correct
29 Correct 954 ms 31148 KB Output is correct
30 Correct 1045 ms 31276 KB Output is correct
31 Correct 967 ms 31096 KB Output is correct
32 Correct 941 ms 31300 KB Output is correct
33 Correct 914 ms 31244 KB Output is correct
34 Correct 938 ms 31120 KB Output is correct
35 Correct 909 ms 31192 KB Output is correct
36 Correct 919 ms 31304 KB Output is correct
37 Correct 924 ms 31476 KB Output is correct
38 Correct 935 ms 31172 KB Output is correct
39 Correct 907 ms 31288 KB Output is correct
40 Correct 922 ms 31096 KB Output is correct
41 Correct 913 ms 31200 KB Output is correct
42 Correct 924 ms 31228 KB Output is correct
43 Correct 927 ms 31472 KB Output is correct
44 Correct 926 ms 31512 KB Output is correct
45 Correct 920 ms 31564 KB Output is correct
46 Correct 895 ms 31500 KB Output is correct
47 Correct 906 ms 31364 KB Output is correct
48 Correct 905 ms 31484 KB Output is correct
49 Correct 928 ms 31368 KB Output is correct
50 Correct 910 ms 31676 KB Output is correct
51 Correct 904 ms 31356 KB Output is correct
52 Correct 913 ms 31416 KB Output is correct
53 Correct 902 ms 31428 KB Output is correct
54 Correct 924 ms 31444 KB Output is correct
55 Correct 920 ms 31432 KB Output is correct
56 Correct 901 ms 31428 KB Output is correct
57 Correct 919 ms 31400 KB Output is correct
58 Correct 887 ms 31488 KB Output is correct
59 Correct 911 ms 31428 KB Output is correct
60 Correct 905 ms 31408 KB Output is correct
61 Correct 897 ms 31464 KB Output is correct
62 Correct 903 ms 31508 KB Output is correct
63 Correct 910 ms 31556 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1014 ms 29648 KB Output is correct
2 Correct 967 ms 30644 KB Output is correct
3 Correct 1062 ms 30588 KB Output is correct
4 Correct 1004 ms 30504 KB Output is correct
5 Correct 1012 ms 30500 KB Output is correct
6 Correct 1051 ms 30596 KB Output is correct
7 Correct 983 ms 30728 KB Output is correct
8 Correct 946 ms 30544 KB Output is correct
9 Correct 971 ms 30508 KB Output is correct
10 Correct 954 ms 30592 KB Output is correct
11 Correct 1006 ms 30560 KB Output is correct
12 Correct 985 ms 30548 KB Output is correct
13 Correct 974 ms 30536 KB Output is correct
14 Correct 940 ms 30532 KB Output is correct
15 Correct 993 ms 30660 KB Output is correct
16 Correct 946 ms 30580 KB Output is correct
17 Correct 975 ms 30660 KB Output is correct
18 Correct 1016 ms 30488 KB Output is correct
19 Correct 964 ms 30660 KB Output is correct
20 Correct 982 ms 30484 KB Output is correct
21 Correct 949 ms 30584 KB Output is correct
22 Correct 941 ms 31220 KB Output is correct
23 Correct 973 ms 31112 KB Output is correct
24 Correct 976 ms 31344 KB Output is correct
25 Correct 980 ms 31300 KB Output is correct
26 Correct 995 ms 31184 KB Output is correct
27 Correct 1014 ms 31280 KB Output is correct
28 Correct 1008 ms 31116 KB Output is correct
29 Correct 954 ms 31148 KB Output is correct
30 Correct 1045 ms 31276 KB Output is correct
31 Correct 967 ms 31096 KB Output is correct
32 Correct 941 ms 31300 KB Output is correct
33 Correct 914 ms 31244 KB Output is correct
34 Correct 938 ms 31120 KB Output is correct
35 Correct 909 ms 31192 KB Output is correct
36 Correct 919 ms 31304 KB Output is correct
37 Correct 924 ms 31476 KB Output is correct
38 Correct 935 ms 31172 KB Output is correct
39 Correct 907 ms 31288 KB Output is correct
40 Correct 922 ms 31096 KB Output is correct
41 Correct 913 ms 31200 KB Output is correct
42 Correct 924 ms 31228 KB Output is correct
43 Correct 927 ms 31472 KB Output is correct
44 Correct 926 ms 31512 KB Output is correct
45 Correct 920 ms 31564 KB Output is correct
46 Correct 895 ms 31500 KB Output is correct
47 Correct 906 ms 31364 KB Output is correct
48 Correct 905 ms 31484 KB Output is correct
49 Correct 928 ms 31368 KB Output is correct
50 Correct 910 ms 31676 KB Output is correct
51 Correct 904 ms 31356 KB Output is correct
52 Correct 913 ms 31416 KB Output is correct
53 Correct 902 ms 31428 KB Output is correct
54 Correct 924 ms 31444 KB Output is correct
55 Correct 920 ms 31432 KB Output is correct
56 Correct 901 ms 31428 KB Output is correct
57 Correct 919 ms 31400 KB Output is correct
58 Correct 887 ms 31488 KB Output is correct
59 Correct 911 ms 31428 KB Output is correct
60 Correct 905 ms 31408 KB Output is correct
61 Correct 897 ms 31464 KB Output is correct
62 Correct 903 ms 31508 KB Output is correct
63 Correct 910 ms 31556 KB Output is correct
64 Correct 909 ms 31748 KB Output is correct
65 Correct 902 ms 31684 KB Output is correct
66 Correct 903 ms 31812 KB Output is correct
67 Correct 905 ms 31648 KB Output is correct
68 Correct 894 ms 31864 KB Output is correct
69 Correct 914 ms 31748 KB Output is correct
70 Correct 910 ms 31684 KB Output is correct
71 Correct 899 ms 31688 KB Output is correct
72 Correct 917 ms 31688 KB Output is correct
73 Correct 921 ms 31732 KB Output is correct
74 Correct 907 ms 31768 KB Output is correct
75 Correct 928 ms 31644 KB Output is correct
76 Correct 906 ms 32004 KB Output is correct
77 Correct 906 ms 31788 KB Output is correct
78 Correct 914 ms 31924 KB Output is correct
79 Correct 919 ms 31780 KB Output is correct
80 Correct 902 ms 31988 KB Output is correct
81 Correct 917 ms 31756 KB Output is correct
82 Correct 921 ms 31820 KB Output is correct
83 Correct 925 ms 31772 KB Output is correct
84 Correct 919 ms 31768 KB Output is correct