Submission #1231004

#TimeUsernameProblemLanguageResultExecution timeMemory
1231004altern23Cubeword (CEOI19_cubeword)C++20
84 / 100
1102 ms32492 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)

cubeword.cpp: In lambda function:
cubeword.cpp:27:17: warning: control reaches end of non-void function [-Wreturn-type]
   27 |                 };
      |                 ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...