poj3349

时间:2023-03-08 17:41:01

http://poj.org/problem?id=3349

每个雪花都有六个分支,用六个整数代表,这六个整数是从任意一个分支开始,朝顺时针或逆时针方向遍历得到的。输入多个雪花,判断是否有形状一致的雪花存在。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
struct node{
int xh[];
}snow[][];
int m[];
bool pd(node a,node b)
{
sort(a.xh,a.xh+);
sort(b.xh,b.xh+);
for(int i=;i<;i++)
if(a.xh[i]!=b.xh[i])
return false;
return true;
}
int main()
{
scanf("%d",&n);
int ok=;
memset(m,,sizeof m);
for(int i=;i<n;i++)
{
int sum=;
node pp;
for(int j=;j<;j++)
{
scanf("%d",&pp.xh[j]);
sum=(sum+pp.xh[j])%;
}
if(ok==)
{
for(int j=;j<m[sum];j++)
if(pd(pp,snow[sum][j])){
ok=;break;
}
snow[sum][m[sum]]=pp;
m[sum]++;
}
}
if(ok)
printf("Twin snowflakes found.\n");
else
printf("No two snowflakes are alike.\n");
return ;
}