Ryan123 • 2年前
#include <bits/stdc++.h>
using namespace std;
const int Mod=112357;
int snow[100005][6];
vector<int> H[Mod];
int n;
inline bool Same(int a,int b)
{
for(int i=0; i<6; i++)
{
if((snow[a][0]==snow[b][i] &&
snow[a][1]==snow[b][(i+1)%6] &&
snow[a][2]==snow[b][(i+2)%6] &&
snow[a][3]==snow[b][(i+3)%6] &&
snow[a][4]==snow[b][(i+4)%6] &&
snow[a][5]==snow[b][(i+5)%6]) ||
(snow[a][0]==snow[b][i] &&
snow[a][1]==snow[b][(i+5)%6] &&
snow[a][2]==snow[b][(i+4)%6] &&
snow[a][3]==snow[b][(i+3)%6] &&
snow[a][4]==snow[b][(i+2)%6] &&
snow[a][5]==snow[b][(i+1)%6]))
return true;
}
return false;
}
int main()
{
cin>>n;
for(int i=0; i<n; i++)
for(int j=0; j<6; j++)
cin>>snow[i][j];
int sum=0,k;
for(int i=0; i<n; i++)
{
sum=0;
for(int j=0; j<6; j++)
sum+=snow[i][j];
k=sum%Mod;
for(int j=0; j<H[k].size(); j++)
if(Same(H[k][j],i))
{
cout<<"Twin snowflakes found."<<'\n';
exit(0);
}
H[k].push_back(i);
}
cout<<"No two snowflakes are alike."<<'\n';
return 0;
}
评论: