标签:答案 for bit int col printf 最大 std 最小
可得应当优先寻找最大的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\n",fd(a,b)); 21 } 22 23 return 0; 24 }
标签:答案 for bit int col printf 最大 std 最小
原文地址:https://www.cnblogs.com/stelayuri/p/12236276.html