一、问题描述
二、解题思路
从小到大尝试m,对于m看是否满足条件,不满足则m++,满足则退出。
对于每一试尝试都要执行memset(b,0,sizeof(b)),会出现超时,记录修过的,再进行clear。
三、代码
#include<iostream> using namespace std; int S[305]; bool b[1000005]; int set[305]; void clear(int n) { for(int i=0;i<n;++i) b[set[i]]=false; } int main() { int i,j,k; int N,G; int t; bool flag; int m; scanf("%d",&N); for(i=0;i<N;++i) { scanf("%d",&G); for(j=0;j<G;++j) scanf("%d",&S[j]); memset(b,0,sizeof(b)); m=0; for(j=G;;++j) { flag=false; clear(m); m=0; for(k=0;k<G;++k) { t=S[k]%j; if(b[t]==true) { flag=true; break; } else { b[t]=true; set[m++]=t; } } if(flag==false) break; } printf("%d\n",j); } return 0; }
|
阅读(1745) | 评论(0) | 转发(0) |