TWINSNOW-关于漏判后的耗子尾汁
查看原帖
TWINSNOW-关于漏判后的耗子尾汁
261764
zzyeeeh楼主2020/12/3 19:08

按照自己的思路写了一遍代码,用六个边的边长之和加边长之积作为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;
}
2020/12/3 19:08
加载中...