社区讨论
求两个能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 条回复,欢迎继续交流。
正在加载回复...