看题很容易让人用暴力搜索,再加上剪枝,信心满满地交了题,结果TLE了,绞尽脑汁继续剪枝终于从卡在TEST 6转变为卡在TEST 8了,结果还是TLE …………,某位高人指点,豁然开朗,用空间换时间!!于是 ,每个测试都只是很短的时间…………这样看来,搜索出了剪枝特别重要外,有时候要考虑考虑空间换时间,比如爆搜,或者深搜,也可以考虑时间款空间,比广搜变成广搜深搜结合……下面贴出代码,以作纪念:
View Code
1 /*{ 2 ID:s42k5ek 3 PROG:ariprog 4 LANG:C++ 5 }*/ 6 #include<stdio.h> 7 #include<iostream> 8 #include<math.h> 9 #include<string.h> 10 using namespace std; 11 12 int qq[150000]; 13 int main() 14 { 15 freopen ("ariprog.in","r",stdin); 16 freopen ("ariprog.out","w",stdout); 17 memset(qq,0,sizeof(qq)); 18 int n,m,a,d,i,now,all=0,fin,j; 19 scanf("%d%d",&n,&m); 20 if(n>=4&&n<12) 21 { 22 fin=4; 23 d=4; 24 } 25 else if(n>=12) 26 { 27 d=84; 28 fin=84; 29 } 30 else 31 { 32 fin=1; 33 d=1; 34 } 35 for(i=0;i<=m;i++) 36 for(j=0;j<=m;j++) 37 qq[i*i+j*j]=1; 38 for(;d<=(m*m+m*m)/(n-1);) 39 { 40 for(a=0;a<=m*m+m*m+d-d*n;a++) 41 { 42 for(i=0;i<n;i++) 43 { 44 now=a+i*d; 45 if(qq[now]==0) 46 break; 47 } 48 if(qq[now]==0) 49 continue; 50 printf("%d %d\n",a,d); 51 all++; 52 } 53 d+=fin; 54 } 55 if(all==0) 56 printf("NONE\n"); 57 return 0; 58 }

浙公网安备 33010602011771号