Submission #1303017

#TimeUsernameProblemLanguageResultExecution timeMemory
1303017Faisal_SaqibCubeword (CEOI19_cubeword)C++20
0 / 100
1199 ms99440 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define int long long const int N=257,mod=998244353; vector<int> ma[N],pth,rma[N]; char val[N]; set<string> cnt[20][300][300]; ll dp[N][N]; void dfs(int x) { pth.push_back(x); for(auto y:pth)cout<<y<<' '; cout<<endl; for(auto y:ma[x]) { dfs(y); } pth.pop_back(); } bool gonxt() // fix only 4 value { val[0]='a'; val[4]++; for(int i=4;i>=1;i--) { if(val[i]>'p') { val[i]='a'; val[i-1]++; } } if(val[0]=='b') { return 0; } return 1; } ll count(int len) { // cout<<"AT "; // for(int i=1;i<=8;i++)cout<<val[i]<<' '; // cout<<endl; ll ans=1; for(int i=1;i<=1;i++) { for(auto j:ma[i]) { ans*=((ll)(cnt[len][val[i]][val[j]].size()))%mod; ans=(ans%mod); } } for(int i=5;i<=7;i++) { for(char c='a';c<='p';c++) { dp[i][c]=1; for(auto j:rma[i]) { dp[i][c]=(dp[i][c]*(ll)(cnt[len][c][val[j]].size()))%mod; } } } ll fnl=0; for(int i=8;i<=8;i++) { for(char c='a';c<='p';c++) { dp[i][c]=1; for(auto j:rma[i]) { ll sm=0; for(char c1='a';c1<='p';c1++) { sm=(sm+(dp[j][c1]*(ll)(cnt[len][c][c1].size()))%mod)%mod; } dp[i][c]=(dp[i][c]*sm)%mod; } fnl+=(dp[i][c]*ans)%mod; fnl%=mod; } } return fnl; } int32_t main() { // cout<<('p'-'a'+1)<<endl; ma[1].push_back(2); // 1 2 ma[1].push_back(3);// 1 3 ma[1].push_back(4);// 1 5 ma[2].push_back(5);// 2 4 ma[2].push_back(6);// 2 6 ma[3].push_back(5); // 3 4 ma[3].push_back(7);// 3 7 ma[5].push_back(8);// 4 8 ma[4].push_back(6); // 5 6 ma[4].push_back(7); // 5 7 ma[6].push_back(8); // 6 8 ma[7].push_back(8); // 7 8 // dfs(1); for(int i=1;i<=8;i++) { for(auto j:ma[i]) { // cout<<i<<' '<<j<<endl; rma[j].push_back(i); } } int n; cin>>n; for(int i=0;i<n;i++) { string s; cin>>s; int len=s.size(); string t=s; reverse(begin(t),end(t)); cnt[len][s[0]][s.back()].insert(s); if(t==s)continue; cnt[len][s.back()][s[0]].insert(t); } ll sm=0; for(int x=1;x<=8;x++)val[x]='?'; for(int len=3;len<=10;len++) { for(int x=1;x<=4;x++) { val[x]='a'; } do { sm+=count(len)%mod; sm%=mod; // break; }while(gonxt()); } cout<<sm<<endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...