ZJNU 1699 - Bits
Posted stelayuri
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZJNU 1699 - Bits相关的知识,希望对你有一定的参考价值。
可得应当优先寻找最大的2^n-1这个数
如果l的位数不等于r的位数,那么这个数 2^n-1 就是最优解(每一位全为1)
如果l和r的位数相同,先看r是否符合 2^n-1,符合直接返回,不符合的话拆除最高位继续寻找
例如 l=10 r=14
即1010~1110 B
l和r位数相同且r不全为1
则可以拆除最高位1后
寻找10~110B中位数最大的最小数
位数不同,直接找到11B返回
则最终答案为1000B+11B=8+3=11
1 #include<stdio.h> 2 typedef long long ll; 3 ll fd(ll a,ll b) 4 { 5 ll i; 6 for(i=1;i<=b+1;i*=2); 7 i/=2;//找出小于等于i的最大的2的幂次 8 if(a<i) 9 return i-1; 10 else 11 return fd(a-i,b-i)+i;//拆出最高位的1,然后寻找其余低位上的最大符合题意的值 12 } 13 int main(){ 14 int T,t; 15 ll a,b; 16 scanf("%d",&T); 17 for(t=0;t<T;t++) 18 { 19 scanf("%lld%lld",&a,&b); 20 printf("%lld ",fd(a,b)); 21 } 22 23 return 0; 24 }
以上是关于ZJNU 1699 - Bits的主要内容,如果未能解决你的问题,请参考以下文章