看题很容易让人用暴力搜索,再加上剪枝,信心满满地交了题,结果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 }

 

posted on 2012-07-11 15:08  醉春雨  阅读(132)  评论(0)    收藏  举报