//Beiba.cpp rulit!
#include <bits/stdc++.h>
using namespace std;
#define open freopen ("sum.in","r",stdin), freopen ("sum.out","w",stdout);
#define nl '\n'
#define ll long long int
#define pb push_back
#define sz size()
#define all(x) x.begin(), x.end()
#define S second
#define F first
#define co continue
#define NO cout<<"NO"<<nl
#define YES cout<<"YES"<<nl
#define No cout<<"No"<<nl
#define Yes cout<<"Yes"<<nl
#define rt return
#define str string
#define pot fixed<<setprecision
#define int ll
#define pi pair<int,int>
#define vi vector
#define MAI INT64_MAX
#define MII INT64_MIN
const int inf=1e18, mod=1e9+7, N=3e5+7;
int n,d,ans1,ans2,ans3,ans4;
str a[N];
map <str,int> cnt;
void ibrosh_abi(){
cin>>n>>d;
for(int i=1; i<=n; i++) cin>>a[i];
sort(a+1,a+n+1);
for(int i=1; i<=n; i++){
str s=a[i];
for(int pos1=0; pos1<4; pos1++){
s[pos1]='#';
cnt[s]++;
s=a[i];
}
for(int pos1=0; pos1<4; pos1++){
for(int pos2=pos1+1; pos2<4; pos2++){
s[pos1]='#';
s[pos2]='#';
cnt[s]++;
s=a[i];
}
}
for(int pos3=0; pos3<4; pos3++){
for(int apos=0; apos<4; apos++){
if(apos==pos3) co;
s[apos]='#';
}
cnt[s]++;
s=a[i];
}
}
for(int i=1; i<=n; i++){
str s=a[i];
for(int pos1=0; pos1<4; pos1++){
s[pos1]='#';
ans1+=cnt[s]-1;
s=a[i];
}
for(int pos1=0; pos1<4; pos1++){
for(int pos2=pos1+1; pos2<4; pos2++){
s[pos1]='#';
s[pos2]='#';
ans2+=cnt[s]-1;
s=a[i];
}
}
for(int pos3=0; pos3<4; pos3++){
for(int apos=0; apos<4; apos++){
if(apos==pos3) co;
s[apos]='#';
}
ans3+=cnt[s]-1;
s=a[i];
}
}
ans1/=2;
ans2/=2;
ans3/=2;
ans2-=(3*ans1);
ans3-=(2*ans2);
ans3-=(3*ans1);
ans4=((n*(n-1))/2)-(ans1+ans2+ans3);
if(d==1) cout<<ans1;
else if(d==2) cout<<ans2;
else if(d==3) cout<<ans3;
else cout<<ans4;
}
signed main(){
ios_base::sync_with_stdio(false); cin.tie(0);
//open
int tt=1,cas=1;
//cin>>tt;
while(tt--){
//cout<<"Case "<<cas++<<": ";
ibrosh_abi();
}
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |