#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-=(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);
}
}
}
}
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-=(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 time | Memory | Grader output |
|---|
| Fetching results... |