做题还是得多想想啊!!暴力一般是没好结果的。。。。。
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 }
刚开始做就直接,,,做得好像也能过,,,, 不过这个更快一点