Submission #1303124

#TimeUsernameProblemLanguageResultExecution timeMemory
1303124Gadir_2880PIN (CEOI10_pin)C++20
60 / 100
44 ms15088 KiB
#include<bits/stdc++.h> using namespace std; #define debug(n,m) cout<<"["<<#n<<"]->"<<n<<m #define int long long #define all(x) x.begin(),x.end() #define pb push_back const int N=2e6+5; const int mod=1e9+7; const int inf=2e9; int dp[37][37][37][37]; int pos[256]; void levi() { int n,d; cin>>n>>d; int tim=0; for (char c='0';c<='9';++c) { pos[c]=tim++; } for (char c='a';c<='z';++c) { pos[c]=tim++; } for (int i=1;i<=n;++i) { string s; cin>>s; for (int j=0;j<16;++j) { vector<int> id={36,36,36,36}; for (int l=0;l<4;++l) { if (j&(1<<l)) id[l]=pos[s[l]]; //debug(pos[s[l]],'\n'); } ++dp[id[0]][id[1]][id[2]][id[3]]; } } d=4-d; int res=0; for (int i=0;i<16;++i) { if (__builtin_popcount(i)!=d) continue; vector<int> id; for (int j=0;j<4;++j) { if (i&(1<<j)) id.pb(j); } if (d==0) { int cu=dp[36][36][36][36]; res+=(cu*(cu-1)/2); break; } else if (d==1) { for (int c=0;c<tim;++c) { vector<int> pu={36,36,36,36}; pu[id[0]]=c; int cu=dp[pu[0]][pu[1]][pu[2]][pu[3]]; res+=(cu*(cu-1)/2); } } else if (d==2) { for (int c=0;c<tim;++c) { for (int c2=0;c2<tim;++c2) { vector<int> pu={36,36,36,36}; pu[id[0]]=c; pu[id[1]]=c2; int cu=dp[pu[0]][pu[1]][pu[2]][pu[3]]; res+=(cu*(cu-1)/2); } } } else if (d==3) { for (int c=0;c<tim;++c) { for (int c2=0;c2<tim;++c2) { for (int c3=0;c3<tim;++c3) { vector<int> pu={36,36,36,36}; pu[id[0]]=c; pu[id[1]]=c2; pu[id[2]]=c3; int cu=dp[pu[0]][pu[1]][pu[2]][pu[3]]; res+=(cu*(cu-1)/2); } } } } } //debug(res,' '); ++d; for (int i=0;i<16;++i) { if (__builtin_popcount(i)!=d) continue; vector<int> id; for (int j=0;j<4;++j) { if (i&(1<<j)) id.pb(j); } if (d==1) { for (int c=0;c<tim;++c) { vector<int> pu={36,36,36,36}; pu[id[0]]=c; int cu=dp[pu[0]][pu[1]][pu[2]][pu[3]]; res-=(cu*(cu-1)/2); } } else if (d==2) { for (int c=0;c<tim;++c) { for (int c2=0;c2<tim;++c2) { vector<int> pu={36,36,36,36}; pu[id[0]]=c; pu[id[1]]=c2; int cu=dp[pu[0]][pu[1]][pu[2]][pu[3]]; res-=2*(cu*(cu-1)/2); } } } else if (d==3) { for (int c=0;c<tim;++c) { for (int c2=0;c2<tim;++c2) { for (int c3=0;c3<tim;++c3) { vector<int> pu={36,36,36,36}; pu[id[0]]=c; pu[id[1]]=c2; pu[id[2]]=c3; int cu=dp[pu[0]][pu[1]][pu[2]][pu[3]]; res-=3*(cu*(cu-1)/2); } } } } else { for (int c=0;c<tim;++c) { for (int c2=0;c2<tim;++c2) { for (int c3=0;c3<tim;++c3) { for (int c4=0;c4<tim;++c4) { vector<int> pu={36,36,36,36}; pu[id[0]]=c; pu[id[1]]=c2; pu[id[3]]=c4; pu[id[2]]=c3; int cu=dp[pu[0]][pu[1]][pu[2]][pu[3]]; res-=2*(cu*(cu-1)/2); } } } } } } cout<<res<<'\n'; } int32_t main() { // freopen("sumdiv.in","r",stdin); // freopen("sumdiv.out","w",stdout); ios_base::sync_with_stdio(0); cin.tie(0);int tt=1;//cin>>tt; while(tt--)levi(); }
#Verdict Execution timeMemoryGrader output
Fetching results...