按照自己的思路写了一遍代码,用六个边的边长之和加边长之积作为hash值,本应该会误判但是在Acwing上漏判了,同学查不出错让我耗子尾汁,囚囚各位大佬帮忙QAQ
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100010
const int MOD=99991;
int n;
vector<int> hsh[MAXN];
int fr()
{
int sum;
char ch=getchar();
while(ch>'9'||ch<'0')
ch=getchar();
sum=ch-'0';
while((ch=getchar())>='0'&&ch<=9)
sum=(sum<<3) + (sum<<1) + ch-'0';
return sum;
}
int H(int he, int dapai)
{
int num=(he%MOD+dapai%MOD)%MOD;
hsh[he].push_back(num);
return num;
}
int check(int he,int hash)
{
int len=hsh[he].size();
len--;
for(int i=0;i<=len-1;i++)
{
if(hsh[he][i]==hash)
return 1;
}
return 0;
}
int main()
{
n=fr();
for(int i=1;i<=n;i++)
{
int he=0,dapai=1;
for(int k=1;k<=6;k++)
{
int a=fr();
he=(he+a)%MOD;
dapai =(long long) ( (dapai%MOD) *(a%MOD) ) %MOD;
}
int hash=H(he,dapai);
if(check(he,hash)){
cout<<"Twin snowflakes found."<<endl;
return 0;
}
}
cout<<"No two snowflakes are alike."<<endl;
return 0;
}