Submission #1323187

#TimeUsernameProblemLanguageResultExecution timeMemory
1323187lorrelfPIN (CEOI10_pin)C++20
70 / 100
203 ms20132 KiB
//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);
	if(d==4){
		cout<<(n*(n-1))/2<<nl;
		rt;
	}
	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];
		}
	}
	ans2-=(3*ans1);
	ans3-=(2*ans2);
	ans3-=(3*ans1);
	ans4=(n*(n-1)/2)-(ans1+ans2+ans3);
	if(d==1) cout<<ans1/2;
	else if(d==2) cout<<ans2/2;
	else if(d==3) cout<<ans3/2;
	else cout<<ans4/2;
}
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 timeMemoryGrader output
Fetching results...