做题还是得多想想啊!!暴力一般是没好结果的。。。。。

uva 100

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=36

 1 #include"cstdio"
 2 //typedef unsigned int uint;
 3 using namespace std;
 4 long long   a[1000000];
 5 long long   len (long long  n){
 6     long long   cnt = 1;
 7     while(n>1){
 8         if(n<1000000&&a[n]){
 9             cnt += a[n] -1;//这一步是关键。。。为什么-1自己想啊。。
10             break;
11         }
12         if(n&1)
13             n += 2*n +1;
14         else
15             n>>=1;
16         cnt++;
17 
18     }
19     return cnt;
20 }
21 long long  maxn(long long  x,long long  y){
22     if(y<x){
23         x^=y;
24         y^=x;
25         x^=y;
26     }
27     long long  mmx = a[y];
28     while(y>x){
29         if(mmx<a[x])
30             mmx = a[x];
31         x++;
32     }
33     return mmx;
34 }
35 int main(){
36     long long  i,j;
37     for(long long  c =1;c<1000000;c++)
38         a[c] = len(c);
39     //printf("sdgfd\n");
40     while(scanf("%lld %lld",&i,&j)==2){
41         
42         long long  sum = maxn(i,j);
43         printf("%lld %lld %lld\n",i,j,sum);
44         
45     }
46     return 0;
47 }

刚开始做就直接,,,做得好像也能过,,,, 不过这个更快一点

posted @ 2013-05-26 23:33  夜晓楼  阅读(153)  评论(0编辑  收藏  举报