2021牛客多校 Hash Function(fft)

Posted thusloop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021牛客多校 Hash Function(fft)相关的知识,希望对你有一定的参考价值。

Hash Function
题意:给出数组,求最小的mod使得 每个数取模后都不同。
思路:a%p=b%p 等价于 (a-b)%p=0 ,所以p不能为数组中任意两个数的差 ,假设我们现在知道了存在哪些差值,那么我们可以枚举倍数的方法求最小的p,
求所有差值可以用fft ,可以转化为(xa1+xa2+xa3+……+xan)*(x-a1+x-a2+x-a3+……+x-an) 系数大于0的那个指数就是存在的差值
负数可以加个500001;

#include<bits/stdc++.h>
#define int long long
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
const int inf=2e18+100;
const int maxn=(int)1e6+10000;
const double PI=acos(-1);
int len=1;
int rev[maxn<<1];
int a[maxn],cnt[maxn];
struct comple

	double x;
	double y;
	comple(double x=0,double y=0):x(x),y(y) 
	comple operator + (const comple b)const
	
		return comple(x+b.x,y+b.y);
	
	comple operator - (const comple b)const
	
		return comple(x-b.x,y-b.y);
	
	comple operator * (const comple b)const
	
		comple ans;
		ans.x=x*b.x-y*b.y;
		ans.y=x*b.y+y*b.x;
		return ans;
	

 c[maxn<<1],b[maxn<<1];
void change(comple f[])

	for(int i=0; i<len; i++)
	
		rev[i]=rev[i>>1]>>1;
		if(i&1)rev[i]|=len>>1;
	
	for(int i=0; i<len; i++)
	
		if(i<rev[i])//保证只交换一次
			swap(f[i],f[rev[i]]);
	

void fft(comple f[],int op)

	change(f);
	for(int h=2; h<=len; h<<=1)
	
		comple wncos(2*PI/h),sin(op*2*PI/h);
		for(int j=0; j<len; j+=h)
		
			comple w1,0;
			for(int k=j; k<j+h/2; k++)
			
				comple u=f[k];
				comple v=w*f[k+h/2];
				f[k]=u+v;
				f[k+h/2]=u-v;
				w=w*wn;
			
		
	
	if(op==-1)
	
		for(int i=0; i<len; i++)
		
			f[i].x=f[i].x/len+0.5;
		
	

signed main()

	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	
		cin>>a[i];
		b[a[i]].x=1;
		c[500001-a[i]].x=1;
	
	while(len<1000001) len<<=1;
	fft(b,1);
	fft(c,1);
	for(int i=0;i<len;i++) b[i]=b[i]*c[i];
	fft(b,-1);
	for(int i=0;i<=len;i++)
	
		if((int)b[i].x>0)
		
			cnt[abs(500001-i)]=1;
		 
	
	for(int i=n;;i++)
	
		bool fg=1;
		for(int j=i;j<=500001;j+=i)
		
			if(cnt[j])
			
				fg=0;break;
			
		
		if(fg)
		
			cout<<i<<"\\n";
			return 0;
		
	

以上是关于2021牛客多校 Hash Function(fft)的主要内容,如果未能解决你的问题,请参考以下文章

[Nowcoder] Browser Games-2021牛客多校10-A | Hash /压缩Trie

2021牛客多校8 D.OR(位运算)

2021牛客多校9 E.Eyjafjalla(dfs序+主席树)

2021牛客多校5 B Boxes

2021牛客多校1 B Ball Dropping

2021牛客多校8 D OR