poj3349(Hash)

来源:互联网 发布:淘宝怎么联系店家客服 编辑:程序博客网 时间:2024/04/27 20:23
#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>#define For(i,j,k) for(i=j;i<=k;++i)struct hash_head{int next;}head[100010];struct node{int num[7],next;}nod[100020];int n,t[7],flag,dq;int cmp(int a[7],int b[7]){int f,x,y,i,j;For(i,1,6) {x=1;y=i;f=0;For(j,1,6) {if (a[x]!=b[y]) {f=1;break;}++x;++y;if (y>6) y=1;}if (!f) break;}if (!f) return 1;int c[7];c[1]=b[6];c[2]=b[5];c[3]=b[4];c[4]=b[3];c[5]=b[2];c[6]=b[1];For(i,1,6) {x=1;y=i;f=0;For(j,1,6) {if (a[x]!=c[y]) {f=1;break;}++x;++y;if (y>6) y=1;}if (!f) break;}return (!f);}void inc(){int sum;sum=(t[1]+t[2]+t[3]+t[4]+t[5]+t[6])%100000;int i=head[sum].next;while (i!=0) {if (i!=0&&cmp(t,nod[i].num)) {printf("Twin snowflakes found.");flag=1;return ;} else {if (nod[i].next) i=nod[i].next; else break;}}if (!head[sum].next) head[sum].next=++dq; else nod[i].next=++dq;nod[dq].num[1]=t[1];nod[dq].num[2]=t[2];nod[dq].num[3]=t[3];nod[dq].num[4]=t[4];nod[dq].num[5]=t[5];nod[dq].num[6]=t[6];}int main(){int i;scanf("%d",&n);For(i,1,n) {scanf("%d%d%d%d%d%d",&t[1],&t[2],&t[3],&t[4],&t[5],&t[6]);inc();if (flag) return 0;}printf("No two snowflakes are alike.");return 0;}

1 0