POJ 2769
注释掉那段会超时,呃。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int Max=1000000;
bool val[Max+1];
int p[350];
int main(){
int t,n;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&p[i]);
if(n==1){
printf("1\n");
continue;
}
memset(val,false,sizeof(val));
/* for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
int tmp=p[i]-p[j];
// cout<<tmp<<endl;
tmp=abs(tmp);
// cout<<tmp<<endl;
for(int k=1;k<=tmp;k++)
if(tmp%k==0)
val[k]=true;
}
} */
for(int i=1;i<=Max;i++){
memset(val,false,i*sizeof(bool)); //这里的i不能少,否则会超时。。。看了DIS才知道的
int j;
for(j=0;j<n;j++){
if(!val[p[j]%i])
val[p[j]%i]=true;
else break;
}
if(j==n){
printf("%d\n",i);
break;
}
}
/*
int ans;
for(ans=1;ans<Max;ans++)
if(!val[ans])
break;
printf("%d\n",ans);*/
}
return 0;
}

浙公网安备 33010602011771号