Submission #1303020

#TimeUsernameProblemLanguageResultExecution timeMemory
1303020MuhammadSaramCubeword (CEOI19_cubeword)C++20
100 / 100
765 ms7616 KiB
#include <bits/stdc++.h>

using namespace std;

const int C = 62, mod = 998244353;

int w[C][C];
int cnt[C][C][C], ans=0;
vector<string> v[11];
map<char,int> id;

void add(int &x,int y)
{
	x+=y;
	if (x>=mod) x-=mod;
}

void solve(int sz)
{
	for (int i=0;i<C;i++)
		for (int j=0;j<C;j++)
		{
			w[i][j]=0;
			for (int k=0;k<C;k++) cnt[i][j][k]=0;
		}
	set<string> se;
	for (auto i:v[sz])
	{
		se.insert(i);
		string s=i;reverse(s.begin(),s.end());
		se.insert(s);
	}
	for (auto i:se)
		w[id[i[0]]][id[i[sz-1]]]++;
	for (int i=0;i<C;i++)
		for (int j=0;j<C;j++)
			for (int k=0;k<C;k++)
				for (int l=0;l<C;l++)
					add(cnt[i][j][k],1ll*w[i][l]*w[j][l]*w[k][l]%mod);
	for (int i=0;i<C;i++)
		for (int j=0;j<C;j++)
			for (int k=0;k<C;k++)
				for (int l=0;l<C;l++)
					add(ans,1ll*cnt[i][j][k]*cnt[i][k][l]%mod*cnt[i][j][l]%mod*cnt[j][k][l]%mod);
}

int main()
{
	ios::sync_with_stdio(0);
	cin.tie(NULL), cout.tie(NULL);
	
	int x=0;
	for (char c='a';c<='z';c++) id[c]=x++;
	for (char c='A';c<='Z';c++) id[c]=x++;
	for (char c='0';c<='9';c++) id[c]=x++;
	int n;
	cin>>n;
	for (int i=0;i<n;i++)
	{
		string s;
		cin>>s;
		v[s.size()].push_back(s);
	}
	for (int i=3;i<=10;i++)
		if (v[i].size())
			solve(i);
	cout<<ans<<endl;
	
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...