#include"map"
#include"iostream"
#include"vector"
#include"stdio.h"
using namespace std;
typedef long long ll;
const int prime=14997;
const int maxn=100000+10;
vector<int>Hash[prime];
int g[maxn][6];
int cmp(int a,int b)
{
int i,j,ser=1,pos,ser1=1,ser2=1;
for(i=0;i<6;i++) //只要与第A片雪花的第一个数相等就要进行判断
if(g[b][i]==g[a][0])
{
for(j=0;j<6;j++) //顺时针判断 123456 612345
if(g[a][j]!=g[b][(i+j)%6]) break;
if(j==6) return 1;
for(j=0;j<6;j++) //逆时针判断 123456 432165
if(g[a][j]!=g[b][(i-j+6)%6]) break;
if(j==6) return 1;
}
return 0;
}
int check()
{
int i,j,k,len;
for(i=0;i<prime;i++)
{
len=Hash[i].size();
for(j=0;j<len;j++)
for(k=j+1;k<len;k++)
if(cmp(Hash[i][j],Hash[i][k]))
return 1;
}
return 0;
}
int main()
{
int n;
while(cin>>n)
{
int i,j,sum;
for(i=0;i<prime;i++)
Hash[i].clear();
for(i=0;i<n;i++)
{
sum=0;
for(j=0;j<6;j++)
{
scanf("%d",&g[i][j]);sum+=g[i][j];
}
int H=sum%prime; //取余法定址
Hash[H].push_back(i);
}
if(check())
puts("Twin snowflakes found.");
else
puts("No two snowflakes are alike.");
}
return 0;
}
POJ 3349 HASH
最新推荐文章于 2020-03-07 11:34:01 发布