青海省教育厅门户网站,以下工具属于网站设计工具的是,石嘴山网站seo,旅游网页设计模板免费传送门 文章目录题意#xff1a;思路#xff1a;题意#xff1a;
给你一个数组aaa#xff0c;你需要找一个最小的模数xxx#xff0c;使得aaa中每个数都模上xxx之后互不相同。 n≤5e5,ai≤5e5,ai!ajn\le5e5,a_i\le5e5,a_i!a_jn≤5e5,ai≤5e5,ai!aj
思路#xff1a…传送门
文章目录题意思路题意
给你一个数组aaa你需要找一个最小的模数xxx使得aaa中每个数都模上xxx之后互不相同。 n≤5e5,ai≤5e5,ai!ajn\le5e5,a_i\le5e5,a_i!a_jn≤5e5,ai≤5e5,ai!aj
思路
考虑两个数modx\bmod xmodx相等意味着什么写成表达式的形式就是aix∗kaja_ix*ka_jaix∗kaj也就说我们如果知道每两个数之间的差让后将差的因子筛掉剩下的最小的数即为答案。 显然可以用fftfftfft加速上面的求每两个数之间的差的过程由于存在负数所以加一个偏移量即可让后对于每个数遍历一下以他为因数的数看看是否被标记即可这样可以避免根号的分解过程。 复杂度O(nlogn)O(nlogn)O(nlogn)
**// Problem: Hash Function
// Contest: NowCoder
// URL: https://ac.nowcoder.com/acm/contest/11166/H
// Memory Limit: 524288 MB
// Time Limit: 4000 ms
//
// Powered by CP Editor (https://cpeditor.org)//#pragma GCC optimize(Ofast,no-stack-protector,unroll-loops,fast-math)
//#pragma GCC target(sse,sse2,sse3,ssse3,sse4.1,sse4.2,avx,avx2,popcnt,tunenative)
//#pragma GCC optimize(2)
#includecstdio
#includeiostream
#includestring
#includecstring
#includemap
#includecmath
#includecctype
#includevector
#includeset
#includequeue
#includealgorithm
#includesstream
#includectime
#includecstdlib
#includerandom
#includecassert
#define X first
#define Y second
#define L (u1)
#define R (u1|1)
#define pb push_back
#define mk make_pair
#define Mid ((tr[u].ltr[u].r)1)
#define Len(u) (tr[u].r-tr[u].l1)
#define random(a,b) ((a)rand()%((b)-(a)1))
#define db puts(---)
using namespace std;//void rd_cre() { freopen(d://dp//data.txt,w,stdout); srand(time(NULL)); }
//void rd_ac() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//AC.txt,w,stdout); }
//void rd_wa() { freopen(d://dp//data.txt,r,stdin); freopen(d://dp//WA.txt,w,stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pairint,int PII;const int N6000010,mod1e97,INF0x3f3f3f3f;
const double eps1e-6,PIacos(-1);int n;
int rev[N],p[N];
int bit,limit;
int c[N];struct Complex {double x,y;Complex operator (const Complex t) const { return {xt.x,yt.y}; }Complex operator - (const Complex t) const { return {x-t.x,y-t.y}; }Complex operator * (const Complex t) const { return {x*t.x-y*t.y,x*t.yy*t.x}; }
}a[N],b[N];void fft(Complex a[],int inv) {for(int i0;ilimit;i) if(irev[i]) swap(a[i],a[rev[i]]);for(int mid1;midlimit;mid1) {Complex w1Complex({cos(PI/mid),inv*sin(PI/mid)});for(int i0;ilimit;imid*2) {Complex wkComplex({1,0});for(int j0;jmid;j,wkwk*w1) {Complex xa[ij],ywk*a[ijmid];a[ij]xy; a[ijmid]x-y;}}}
}int main()
{
// ios::sync_with_stdio(false);
// cin.tie(0);cinn;for(int i1;in;i) scanf(%d,p[i]);for(int i1;in;i) {a[p[i]].x1;b[500000-p[i]].x1;}while((1bit)1000000) bit;limit1bit;for(int i0;ilimit;i) rev[i](rev[i1]1)|((i1)(bit-1));fft(a,1); fft(b,1);for(int i0;ilimit;i) a[i]a[i]*b[i];fft(a,-1);for(int i500000;i1000000;i) if((int)(a[i].x/limit0.5)0) c[i-500000]1;for(int in;;i) {bool flagtrue;for(int ji;jN;ji) if(c[j]) { flagfalse; break; }if(flag) {printf(%d\n,i);break;}}return 0;
}
/**/