#6537. 毒瘤题加强版再加强版(hash)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#6537. 毒瘤题加强版再加强版(hash)相关的知识,希望对你有一定的参考价值。
#6537. 毒瘤题加强版再加强版(hash)
用模数存对应位置的hash = A × x + B =A\\times x+B =A×x+B值,为了防止hash冲突,多取几个模数,最后 ( m o d A ) = B \\pmodA=B (modA)=B 的就是出现奇数且没有冲突的。
3 M B = 2 20 × 3 3MB=2^20\\times 3 3MB=220×3
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int M=6,mod[M]=24593,23627,22959,25543,29881,29873, A = 805306457, B = 402653189;
int n,k;
LL f[M][30005];
vector<int>ans;
int main()
scanf("%d%d",&n,&k);
for(int i=1,x;i<=n;i++)
scanf("%d",&x);LL H=1LL*A*x+B;
for(int j=0;j<M;j++) f[j][x%mod[j]]^=H;
for(int i=0;i<M;i++) for(int j=0;j<mod[i];j++) if(f[i][j]%A==B) ans.push_back((f[i][j]-B)/A);
sort(ans.begin(),ans.end()),unique(ans.begin(),ans.end());
for(int i=0;i<k;i++) printf("%d\\n",ans[i]);
以上是关于#6537. 毒瘤题加强版再加强版(hash)的主要内容,如果未能解决你的问题,请参考以下文章
bzoj 3514 Codechef MARCH14 GERALD07加强版 主席树+LCT