社区讨论

求两个能AC的hash模数

P4305[JLOI2011] 不重复数字参与者 9已保存回复 17

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
17 条
当前快照
1 份
快照标识符
@lobqe5xb
此快照首次捕获于
2023/10/30 01:14
2 年前
此快照最后确认于
2023/11/04 05:51
2 年前
查看原帖
这题被加强之后双 hash 都过不了?用了 19260817、23068674、19491001、10000007 等等组合,都会在四五十万行的位置 WA,恶心吐了
还是说我 hash 写假了……求调
CPP
#include<bits/stdc++.h>
#define ll long long
#define back return
#define ri register int
using namespace std;
ll read()
{
	ll x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
			f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=x*10+ch-'0';
		ch=getchar();
	}
	back x*f;
}
const int p=23068673,p1=19491001;
ll t,n;
int a[50005];
bool hash1[23068674],hash2[20000000];
int main()
{
	t=read();
	while(t--)
	{
		n=read();
		for(ri i=1;i<=n;i++)
			a[i]=read(),hash1[(a[i]%p+p)%p]=1,hash2[(a[i]%p1+p1)%p1]=1;
		for(ri i=1;i<=n;i++)
		{
			int lsbl1=(a[i]%p+p)%p,lsbl2=(a[i]%p1+p1)%p1;
			if(hash1[lsbl1]||hash2[lsbl2])
				cout<<a[i]<<" ",hash1[lsbl1]=hash2[lsbl2]=0;
		}	
		cout<<"\n";
	}
	back 0;
}

回复

17 条回复,欢迎继续交流。

正在加载回复...