Submission #287844

#TimeUsernameProblemLanguageResultExecution timeMemory
287844nandonathanielCards (LMIO19_korteles)C++14
100 / 100
63 ms4860 KiB
#include<bits/stdc++.h>
using namespace std;
const int MAXEMPAT=457000,MAXDUA=680;
int kiri[MAXDUA],kanan[MAXDUA],atas[MAXDUA],bawah[MAXDUA],cnt[MAXEMPAT];

int dua(int x,int y){
	return 26*x+y;
}

int empat(int u,int v,int x,int y){
	return 26*26*26*u+26*26*v+26*x+y;
}

int main(){
	ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
	int n;
	long long ans=0;
	char a,b,c,d;
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> a >> b >> c >> d;
		cnt[empat(a-'A',b-'A',c-'A',d-'A')]++;
		kiri[dua(a-'A',c-'A')]++;
		kanan[dua(b-'A',d-'A')]++;
		atas[dua(a-'A',b-'A')]++;
		bawah[dua(c-'A',d-'A')]++;
	}
	for(int i=0;i<676;i++){
		ans+=1LL*kiri[i]*kanan[i];
		ans+=1LL*atas[i]*bawah[i];
	}
	for(int i=0;i<26;i++){
		for(int j=0;j<26;j++){
			for(int k=0;k<26;k++){
				for(int l=0;l<26;l++){
					int x=empat(i,j,k,l),y=empat(k,l,i,j);
					if(x<y)ans-=1LL*cnt[x]*cnt[y];
					y=empat(j,i,l,k);
					if(x<y)ans-=1LL*cnt[x]*cnt[y];
				}
			}
		}
	}
	for(int i=0;i<26;i++){
		for(int j=0;j<26;j++){
			for(int k=0;k<26;k++){
				for(int l=0;l<26;l++){
					int x=empat(k,i,i,j),y=empat(i,j,j,l);
					if(x!=y)ans-=1LL*cnt[x]*cnt[y];
					x=empat(i,j,k,i);y=empat(j,l,i,j);
					if(x!=y)ans-=1LL*cnt[x]*cnt[y];
				}
			}
		}
	}
	//inklusi eksklusi
	for(int i=0;i<26;i++){
		for(int j=i+1;j<26;j++){
			int x=empat(i,j,j,i),y=empat(j,i,i,j);
			ans+=3LL*cnt[x]*cnt[y];
		}
		ans-=2LL*cnt[empat(i,i,i,i)];
	}
	for(int i=0;i<26;i++){
		for(int j=0;j<26;j++){
			if(i==j)continue;
			ans-=1LL*cnt[empat(i,j,i,j)];
			ans-=1LL*cnt[empat(i,i,j,j)];
		}
	}
	cout << ans << '\n';
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...