好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

A.Bits(CodeforcesRound#276(div1)_html/css_WEB-ITno

A. Bits


第1次打div1,就赶上cf挂了,不算rating,在25分钟交了一发,判了半个多小时,最后返回个RE,竟然位运算爆int了,过了A题就睡觉去了

给出一段区间的左端点和右端点,求这段区间的二进制的1最多的最小的。

先把左区间L化为二进制,再把左区间的二进制的从最小位开始,每位变为1,因为这是在当前1的个数中最小的且大于L的。直到大于右区间R。

代码:

#include  #include  #include  #include using namespace std;long long a[100];int main(){    long long l,r;    int n;    scanf("%d",&n);    while(n--)    {        scanf("%I64d%I64d",&l,&r);        memset(a,0,sizeof(a));        int cou=0;        long long ans=l;        while(l>0)        {            a[cou++]=(l%2);            l=l/2;        }        for(int i=0;; i++)        {            a[i]=1;            long long temp=0;            for(int j=0; j 




查看更多关于A.Bits(CodeforcesRound#276(div1)_html/css_WEB-ITno的详细内容...

  阅读:38次