1.4.3 Arithmetic Progressions
好悲剧的一题啊,虽然时间给出了很多秒,可是超时啊,各种wa啊,主要是范围的问题,例如公差的范围,首项的范围,题解找了好久终于找到了范围,搞死我了,要写过一个更好的写法,这种枚举太费事了、、、
View Code
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<stdlib.h> 5 #define INF 0x3f3f3f3f 6 #define Maxin 10000 7 int s[500000],q=0; 8 9 int m; 10 int find(int x,int n)//公差 目标个数 11 { 12 int i; 13 int j=0,start; 14 for(i=0;i<=2*m*m-(n-1)*x;i++)//注意范围 15 { 16 int time=0; 17 while(s[i]==0&&i<=m*m*2-(n-1)*x)//找起点 18 i++; 19 start=i;//确立起点 20 while(s[start]==1)//保证下一个也是在数列内 21 { 22 time++; 23 start+=x; 24 if(time==n)//满足条件 25 { 26 q=1; 27 printf("%d %d\n",i,x); 28 break; 29 } 30 } 31 } 32 return 0; 33 } 34 int main() 35 { 36 int n,x,y; 37 scanf("%d%d",&n,&m); 38 memset(s,0,sizeof(s)); 39 for(x=0;x<=m;x++) 40 for(y=0;y<=m;y++) 41 s[x*x+y*y]=1; 42 43 for(x=1;x<=m*m*2/(n-1);x++)//枚举公差,注意范围 44 find(x,n); 45 46 if(q==0) 47 printf("NONE\n"); 48 return 0; 49 }