POJ3349

mac2022-06-30  27

對奇怪的東西使用“開散列”

const int SIZE=100010; int n,tot,p=99991,snow[SIZE][6],head[SIZE],next[SIZE]; int H(int *a) { int sum=0,mul=1; for(int i=0;i<6;++i) { sum=(sum+a[i])%p; mul=(long long)mul*a[i]%p; } return (sum+mul)%p; } bool equal(int *a,int *b) { for(int i=0;i<6;++i) for(int j=0;j<=6;++j) { bool eq=1; for(int k=0;k<6;++k) if(a[(i+k)%6]!=b[(i+k)%6]) eq=0; if(eq) return 1; eq=1; for(int k=0;k<6;++k) if(a[(i+k)%6]!=b[(j-k+6)%6]) eq=0; if(eq) return 1; } return 0; } bool insert(int *a) { int val=H(a); for(int i=head[val];i;i=next[i]); if(equal(snow[i],a)) return 1; ++tot; memcpy(snow[tot],a,6*sizeof(int)); next[tot]=head[val]; head[val]=tot; return 0; } int main() { cin>>n; for(int i=1;i<=n;++i) { int a[10]; for(int j=0;j<6;++j) scanf("%d",&a[j]); if(insert(a)) { printf("Twin snowflakes found."); return 0; } } printf("No two snowflakes are alike."); return 0; }

转载于:https://www.cnblogs.com/tztqwq/p/11346343.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)