제출 #1168741

#제출 시각아이디문제언어결과실행 시간메모리
1168741SG2AlokCubeword (CEOI19_cubeword)C++20
100 / 100
824 ms18360 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
typedef long long ll;
using namespace __gnu_pbds;
#define endl '\n'
#define hitaf ios_base::sync_with_stdio(false); cin.tie(0);
#define fi first
#define se second
 
template <typename T>
using ordered_set = tree<T,null_type,less<T>,rb_tree_tag, tree_order_statistics_node_update>;
 
const ll MOD1 = 1e9 + 7;
const ll MOD = 998244353;
const ll INF = 4500000000000000000LL;
const ll mod1 = 6900000469;
const ll mod2 = 698000002369;
const int N = 62;
 
ll n, m, q, a[1200005], b[500005], c[500005];
string s, s1, s2;
ll cnt[15][65][65];

int trn(char c){
	if(c >= 'a' && c <= 'z') return c - 'a';
	if(c >= 'A' && c <= 'Z') return c - 'A' + 26;
	return c - '0' + 52;
}

int main(){
	hitaf
	int T = 1;
//	cin >> T;
	
	while(T--){
		cin >> n;
		
		set<string> st;
		for(int i = 1; i <= n; i++){
			cin >> s;
			
			st.insert(s);
			string cur = s;
			reverse(cur.begin(), cur.end());
			st.insert(cur);
		}
		
		for(auto x: st){
			cnt[x.length()][trn(x[0])][trn(x.back())]++;
		}
		
		ll prob = 0;
		for(int len = 3; len <= 10; len++){
			vector<vector<vector<ll>>> prod(62, vector<vector<ll>>(62, vector<ll>(62, 0)));
			
			for(int i = 0; i < N; i++){
				for(int j = 0; j < N; j++){
					for(int k = 0; k < N; k++){
						for(int l = 0; l < N; l++){
							prod[i][j][k] += cnt[len][i][l] * cnt[len][j][l] % MOD * cnt[len][k][l] % MOD;
						}
						prod[i][j][k] %= MOD;
					}
				}
			}
//			
			for(int i = 0; i < N; i++){
				for(int j = 0; j < N; j++){
					for(int k = 0; k < N; k++){
						for(int l = 0; l < N; l++){
							prob += (((prod[i][j][k] * prod[j][k][l] % MOD) * prod[k][l][i]) % MOD * prod[l][i][j]) % MOD;
						}
						prob %= MOD;
					}
				}
			}
		}
		
		cout << prob << endl;
	}
	
	return 0;
}


/*
	
	dp[i][j] = 
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...