#include <bits/stdc++.h>
using namespace std;
#define boost ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
const int inf=1e9;
const int N=2e5+100;
const int mod=1e9+7;
struct edge{
int a,b;
};
vector<string>v;
int cnt[38][38][38][38];
int cnt1[5][5][38][38];
map<char,int>mp;
signed main(){
boost;
int n,d;
cin>>n>>d;
int cnt1=0;
for(char i='a';i<='z';i++){
mp[i]=cnt1;
cnt1++;
}
for(char i='0';i<='9';i++){
mp[i]=cnt1;
cnt1++;
}
for(int i=1;i<=n;i++){
string s;
cin>>s;
v.push_back(s);
cnt[mp[s[0]]][mp[s[1]]][mp[s[2]]][mp[s[3]]]++;
cnt[mp[s[0]]][mp[s[1]]][37][37]++;
cnt[mp[s[0]]][37][mp[s[2]]][37]++;
cnt[mp[s[0]]][37][37][mp[s[3]]]++;
cnt[37][mp[s[1]]][mp[s[2]]][37]++;
cnt[37][mp[s[1]]][37][mp[s[3]]]++;
cnt[37][37][mp[s[2]]][mp[s[3]]]++;
cnt[37][mp[s[1]]][mp[s[2]]][mp[s[3]]]++;
cnt[mp[s[0]]][37][mp[s[2]]][mp[s[3]]]++;
cnt[mp[s[0]]][mp[s[1]]][37][mp[s[3]]]++;
cnt[mp[s[0]]][mp[s[1]]][mp[s[2]]][37]++;
}
if(n<=5000){
int ans=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j){
continue;
}
string s=v[i],s1=v[j];
int cnt=0;
for(int l=0;l<4;l++){
if(s[l]!=s1[l]){
cnt++;
}
}
if(cnt==d){
ans++;
}
}
}
cout<<ans;
return 0;
}
int ans=0;
for(int i=0;i<n;i++){
if(d==1){
string s=v[i];
for(int j=0;j<4;j++){
for(int l=0;l<=35;l++){
if(j==0&&l!=mp[s[0]]){
ans+=cnt[l][mp[s[1]]][mp[s[2]]][mp[s[3]]];
}
if(j==1&&l!=mp[s[1]]){
ans+=cnt[mp[s[0]]][l][mp[s[2]]][mp[s[3]]];
}
if(j==2&&l!=mp[s[2]]){
ans+=cnt[mp[s[0]]][mp[s[1]]][l][mp[s[3]]];
}
if(j==3&&l!=mp[s[3]]){
ans+=cnt[mp[s[0]]][mp[s[1]]][mp[s[2]]][l];
}
if(ans>0){
cout<<i<<"\n";
break;
}
}
}
continue;
}
if(d==2){
string s=v[i];
ans+=cnt[mp[s[0]]][mp[s[1]]][37][37]+1-cnt[mp[s[0]]][mp[s[1]]][mp[s[2]]][37]-cnt[mp[s[0]]][mp[s[1]]][37][mp[s[3]]];
ans+=cnt[mp[s[0]]][37][mp[s[2]]][37]+1-cnt[mp[s[0]]][mp[s[1]]][mp[s[2]]][37]-cnt[mp[s[0]]][37][mp[s[2]]][mp[s[3]]];
ans+=cnt[mp[s[0]]][37][37][mp[s[3]]]+1-cnt[mp[s[0]]][mp[s[1]]][37][mp[s[3]]]-cnt[mp[s[0]]][37][mp[s[2]]][mp[s[3]]];
ans+=cnt[37][mp[s[1]]][mp[s[2]]][37]+1-cnt[mp[s[0]]][mp[s[1]]][mp[s[2]]][37]-cnt[37][mp[s[1]]][mp[s[2]]][mp[s[3]]];
ans+=cnt[37][mp[s[1]]][37][mp[s[3]]]+1-cnt[mp[s[0]]][mp[s[1]]][37][mp[s[3]]]-cnt[37][mp[s[1]]][mp[s[2]]][mp[s[3]]];
ans+=cnt[37][37][mp[s[2]]][mp[s[3]]]+1-cnt[mp[s[0]]][37][mp[s[2]]][mp[s[3]]]-cnt[37][mp[s[1]]][mp[s[2]]][mp[s[3]]];
}
}
if(d==1){
cout<<ans/2;
return 0;
}
cout<<ans/2;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |