#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)的主要内容,如果未能解决你的问题,请参考以下文章

二柱子课后题加强版的加强版

android面试题总结加强再加强版

bzoj 3514 Codechef MARCH14 GERALD07加强版 主席树+LCT

OCAC暑期比赛第三场 J题 袋鼠认妈妈(加强版) 题解

CodeForces813E:Army Creation (主席树---上一题的加强版)

学术篇网络流24题——方格取数加强版