标签:
1 2 1 2 3 4 5 6 4 3 2 1 6 5
Twin snowflakes found.
代码:
#include<stdio.h> #include<string.h> #include<stdlib.h> #define Max_size 1000000 #define Key 999983 struct node { int v[6]; }s[Max_size]; int found(int m) { return m%Key; } bool equals(node *a,node *b) { int p,q,i,j; for(i=0;i<6;i++) { for(j=0;j<6;j++) { if(a->v[i]==b->v[j]) { int count=0; p=i; q=j; while(a->v[p]==b->v[q]&&count<5) { p=(p+1)%6;q=(q+1)%6; count++; } if(count==5) { return true; } count=0; p=i; q=j; while(a->v[p]==b->v[q]&&count<5) { p=(p+1)%6; q=(q==-1?5:q-1); count++; } if(count==5) { return true; } } } } return false; } bool found_hash(node t,int sum) { for(int k=found(sum);;k++) { if(k==Key) { k=k%Key; } if(s[k].v[0]==-1) { s[k]=t; return false; } if(equals(&s[k],&t)) { return true; } } return false; } int main(void) { int T; scanf("%d",&T); while(T--) { node m; bool flag=false; int sum,n,i,j; memset(s,-1,sizeof(s)); scanf("%d",&n); for(i=0;i<n;i++) { sum=0; for(j=0;j<6;j++) { scanf("%d",&m.v[j]); sum=sum+m.v[j]; } if(!flag) { flag=found_hash(m,sum); } } if(flag) printf("Twin snowflakes found.\n"); else printf("No two snowflakes are alike.\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/qq_16997551/article/details/46953947