RT,样例都没过。。。
#include<bits/stdc++.h>
using namespace std;
const int p=99991;
struct node
{
int a[10];
};
int n,a[10];
vector<node>lb[100010];
int cal(int a[])
{
int add=0,mul=1;
for(int i=1;i<=6;i++)
{
add=(add+a[i])%p;
mul=(mul*a[i])%p;
}
return (add+mul)%p;
}
int equal(int a[],int b[])
{
for(int i=1;i<=6;i++)
{
for(int j=1;j<=6;j++)
{
int flag=1;
for(int k=1;k<=n;k++)
{
if(a[(i+k)%6+1]!=b[(j+k)%6+1])
{
flag=0;
break;
}
}
if(flag)return 1;
for(int k=1;k<=n;k++)
{
if(a[(i+k)%6+1]!=b[(j-k+6)%6+1])
{
flag=1;
break;
}
}
if(!flag)return 1;
}
}
return 0;
}
node tonode(int a[])
{
node ans;
for(int i=1;i<=6;i++)ans.a[i]=a[i];
return ans;
}
int insert(int a[])
{
int hs=cal(a);
for(int i=0;i<lb[hs].size();i++)
{
if(equal(a,lb[hs][i].a))return 1;
}
lb[hs].push_back(tonode(a));
return 0;
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=6;j++)cin>>a[i];
if(insert(a))return cout<<"Twin snowflakes found.",0;
}
cout<<"No two snowflakes are alike.";
return 0;
}