判断两个雪花是否相同。。。。。简易hash。。。。
#include<stdio.h>
#include<string.h>
#define N 100005
typedef struct str
{
int key[6];
int next;
}Node;
Node node[N];
int num;
int head[N];
bool add(int *s)
{
int i,j,k,h,m,sum=0;
for(i=0;i<6;++i) sum^=s[i];
h=sum%N;//以h建立索引,,,
for(j=head[h];j!=-1;j=node[j].next)
{
for( i=0;i<6;++i)
{
if(s[i]==node[j].key[0])
{
for(k=1;k<6;++k)
if(s[(i+k)%6]!=node[j].key[k]) break;
if(k==6) return true;
for(k=1;k<6;++k)
if(s[((i-k)%6+6)%6]!=node[j].key[k]) break;
if(k==6) return true;
}
}
}
for(i=0;i<6;++i) node[num].key[i]=s[i];
node[num].next=head[h];head[h]=num++;
return false;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,i,j,a[6];
num=0;
bool flag=0;
memset(head,-1,sizeof(head));
memset(node,0,sizeof(node));
scanf("%d",&n);
while(n--)
{
for(i=0;i<6;++i)
scanf("%d",&a[i]);
if(flag) continue;
if(add(a)) flag=1;
}
if(flag) printf("Twin snowflakes found.\n");
else printf("No two snowflakes are alike.\n");
}return 0;
}