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
");
			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
",i);
				break;
			}
		}
		/*
		int ans;
		for(ans=1;ans<Max;ans++)
		if(!val[ans])
		break;
		printf("%d
",ans);*/
	}
	return 0;
}

  

原文地址:https://www.cnblogs.com/jie-dcai/p/3944977.html