Submission #3704021


Source Code Expand

/*program from Wolfycz*/
#include<map>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define Fi first
#define Se second
#define inf 0x7f7f7f7f
#define min(x,y) (x<y?x:y)
#define max(x,y) (x>y?x:y)
using namespace std;
typedef long long ll;
typedef unsigned int ui;
typedef unsigned long long ull;
inline char gc(){
	static char buf[1000000],*p1=buf,*p2=buf;
	return p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++;
}
inline int frd(){
	int x=0,f=1; char ch=gc();
	for (;ch<'0'||ch>'9';ch=gc())	if (ch=='-')	f=-1;
	for (;ch>='0'&&ch<='9';ch=gc())	x=(x<<3)+(x<<1)+ch-'0';
	return x*f;
}
inline int read(){
	int x=0,f=1; char ch=getchar();
	for (;ch<'0'||ch>'9';ch=getchar())	if (ch=='-')	f=-1;
	for (;ch>='0'&&ch<='9';ch=getchar())	x=(x<<3)+(x<<1)+ch-'0';
	return x*f;
}
inline void print(int x){
	if (x<0)	putchar('-'),x=-x;
	if (x>9)	print(x/10);
	putchar(x%10+'0');
}
const int N=4e2;
int C[N+10][4];
ll v[N+10];
map<ll,int>Mp;
ll Hash(int a,int b,int c,int d){return ((ll)a<<30)|((ll)b<<20)|((ll)c<<10)|(ll)d;}
void Add(ll x,int v){
	for (int i=0;i<4;i++,x=(x>>10)|((x&1023)<<30)){
		if (Mp.find(x)==Mp.end())	Mp.insert(map<ll,int>::value_type(x,0));
		Mp.find(x)->Se+=v;
	}
}
int main(){
	int n=read(); ll Ans=0;
	for (int i=1;i<=n;i++){
		for (int j=0;j<4;j++)
			C[i][j]=read();
		v[i]=Hash(C[i][0],C[i][1],C[i][2],C[i][3]);
		Add(v[i],1);
	}
	for (int i=1;i<n-4;i++){
		Add(v[i],-1);
		for (int j=i+1;j<=n;j++){
			Add(v[j],-1);
			for (int k=0;k<4;k++){
				static ll A[4];
				A[0]=Hash(C[i][1],C[i][0],C[j][(k+1)%4],C[j][k    %4]);
				A[1]=Hash(C[i][2],C[i][1],C[j][k    %4],C[j][(k+3)%4]);
				A[2]=Hash(C[i][3],C[i][2],C[j][(k+3)%4],C[j][(k+2)%4]);
				A[3]=Hash(C[i][0],C[i][3],C[j][(k+2)%4],C[j][(k+1)%4]);
				int a=0,b=0,c=0,d=0;
				map<ll,int>::iterator it;
				if ((it=Mp.find(A[0]))==Mp.end())	continue;
				else	a=it->Se;
				if ((it=Mp.find(A[1]))==Mp.end())	continue;
				else	b=it->Se;
				if ((it=Mp.find(A[2]))==Mp.end())	continue;
				else	c=it->Se;
				if ((it=Mp.find(A[3]))==Mp.end())	continue;
				else	d=it->Se;
				if (!a||!b||!c||!d)	continue;
				ll res=1;
				for (int l=0;l<4;l++){
					res*=Mp.find(A[l])->Se;
					Add(A[l],-1);
				}
				Ans+=res;
				for (int l=0;l<4;l++)	Add(A[l],1);
			}
			Add(v[j],1);
		}
	}
	printf("%lld\n",Ans);
	return 0;
}

Submission Info

Submission Time
Task E - Building Cubes with AtCoDeer
User Wolfycz
Language C++ (GCC 5.4.1)
Score 900
Code Size 2351 Byte
Status AC
Exec Time 379 ms
Memory 384 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 900 / 900
Status
AC × 3
AC × 20
Set Name Test Cases
Sample 0_000.txt, 0_001.txt, 0_002.txt
All 0_000.txt, 0_001.txt, 0_002.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt
Case Name Status Exec Time Memory
0_000.txt AC 1 ms 256 KB
0_001.txt AC 1 ms 256 KB
0_002.txt AC 1 ms 256 KB
1_003.txt AC 86 ms 256 KB
1_004.txt AC 7 ms 256 KB
1_005.txt AC 164 ms 256 KB
1_006.txt AC 113 ms 256 KB
1_007.txt AC 273 ms 256 KB
1_008.txt AC 256 ms 256 KB
1_009.txt AC 379 ms 256 KB
1_010.txt AC 20 ms 256 KB
1_011.txt AC 81 ms 384 KB
1_012.txt AC 1 ms 256 KB
1_013.txt AC 75 ms 384 KB
1_014.txt AC 2 ms 256 KB
1_015.txt AC 74 ms 384 KB
1_016.txt AC 19 ms 256 KB
1_017.txt AC 75 ms 384 KB
1_018.txt AC 74 ms 384 KB
1_019.txt AC 76 ms 384 KB