Submission #1824952


Source Code Expand

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cassert>
#include <cctype>
#include <map>
#include <algorithm>
using namespace std;
typedef long long lint;
#define cout cerr
#define ni (next_num<int>())
template<class T>inline T next_num(){
	T i=0;char c;
	while(!isdigit(c=getchar())&&c!='-');
	bool flag=c=='-';
	flag?c=getchar():0;
	while(i=i*10-'0'+c,isdigit(c=getchar()));
	return flag?-i:i;
}
template<class T1,class T2>inline void apmax(T1 &a,const T2 &b){if(a<b)a=b;}
template<class T1,class T2>inline void apmin(T1 &a,const T2 &b){if(b<a)a=b;}
const int N=410;
struct Tile{
	const static int D=4;
	int a[D];
	inline Tile nxt(){
		return (Tile){a[1],a[2],a[3],a[0]};
	}
	inline friend bool operator < (const Tile &a,const Tile &b){
		for(int i=0;i<4;i++){
			if(a.a[i]!=b.a[i])return a.a[i]<b.a[i];
		}
		return false;
	}
}tile[N];
map<Tile,int>m;
inline void add(Tile x,int v){
	for(int i=0;i<Tile::D;i++,x=x.nxt()){
		m[x]+=v;
	}
}
inline bool vis(Tile x){
	return m.find(x)!=m.end();
}
int main(){
	int n=ni;
	for(int i=1;i<=n;i++){
		tile[i]=(Tile){ni,ni,ni,ni};
		add(tile[i],1);
	}
	lint ans=0;
	for(int i=1;i<=n;i++){
		add(tile[i],-1);
		int *a=tile[i].a;
		for(int j=i+1;j<=n;j++){
			int *b=tile[j].a;
			add(tile[j],-1);
			for(int d=0;d<4;d++){
				tile[j]=tile[j].nxt();
				Tile f1=(Tile){a[1],a[0],b[0],b[3]};
				Tile f2=(Tile){a[2],a[1],b[3],b[2]};
				Tile f3=(Tile){a[3],a[2],b[2],b[1]};
				Tile f4=(Tile){a[0],a[3],b[1],b[0]};
				if(!(vis(f1)&&vis(f2)&&vis(f3)&&vis(f4)))continue;
				lint tmp=1;
				tmp*=m[f1],add(f1,-1);
				tmp*=m[f2],add(f2,-1);
				tmp*=m[f3],add(f3,-1);
				tmp*=m[f4];
				add(f1,1),add(f2,1),add(f3,1);
				ans+=tmp;
			}
			add(tile[j],1);
		}
	}
	printf("%lld\n",ans);
	return 0;
}

Submission Info

Submission Time
Task E - Building Cubes with AtCoDeer
User sshockwave
Language C++14 (GCC 5.4.1)
Score 900
Code Size 1835 Byte
Status AC
Exec Time 470 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 88 ms 256 KB
1_004.txt AC 7 ms 256 KB
1_005.txt AC 217 ms 256 KB
1_006.txt AC 151 ms 256 KB
1_007.txt AC 354 ms 256 KB
1_008.txt AC 321 ms 256 KB
1_009.txt AC 470 ms 256 KB
1_010.txt AC 33 ms 256 KB
1_011.txt AC 88 ms 384 KB
1_012.txt AC 1 ms 256 KB
1_013.txt AC 68 ms 384 KB
1_014.txt AC 2 ms 256 KB
1_015.txt AC 65 ms 384 KB
1_016.txt AC 17 ms 256 KB
1_017.txt AC 65 ms 384 KB
1_018.txt AC 65 ms 384 KB
1_019.txt AC 67 ms 384 KB