poj3349
http://poj.org/problem?id=3349
每个雪花都有六个分支,用六个整数代表,这六个整数是从任意一个分支开始,朝顺时针或逆时针方向遍历得到的。输入多个雪花,判断是否有形状一致的雪花存在。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n; struct node{ int xh[7]; }snow[15000][101]; int m[15000]; bool pd(node a,node b) { sort(a.xh,a.xh+6); sort(b.xh,b.xh+6); for(int i=0;i<6;i++) if(a.xh[i]!=b.xh[i]) return false; return true; } int main() { scanf("%d",&n); int ok=0; memset(m,0,sizeof m); for(int i=0;i<n;i++) { int sum=0; node pp; for(int j=0;j<6;j++) { scanf("%d",&pp.xh[j]); sum=(sum+pp.xh[j])%14497; } if(ok==0) { for(int j=0;j<m[sum];j++) if(pd(pp,snow[sum][j])){ ok=1;break; } snow[sum][m[sum]]=pp; m[sum]++; } } if(ok) printf("Twin snowflakes found.\n"); else printf("No two snowflakes are alike.\n"); return 0; }