zoukankan      html  css  js  c++  java
  • C. Bits (Codeforces Round #276 (Div. 2) )

    题目大意:给你两个数l,r(l<r),求一个数是大于等于l且小于等于r的数中二进制数的1的个数最多,如果1的个数相同则取最小的那个(翻译渣,请见谅!)

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

    代码:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstdlib>
     4 #include <stdio.h>
     5 #include <cstring>
     6 #include<algorithm>
     7 using namespace std;
     8 __int64 bits[100];
     9 int main()
    10 {
    11     int t;
    12     __int64 l,r;
    13     scanf("%d",&t);
    14     while(t--)
    15     {
    16         __int64 ans;
    17         memset(bits,0,sizeof(bits));
    18         scanf("%I64d%I64d",&l,&r);
    19         ans=l;
    20         int i=0;
    21         while(l>0)
    22         {
    23             bits[i++]=(l%2);
    24             l=l/2;
    25         }
    26         int len=i;
    27         for(i=0;; i++)
    28         {
    29             bits[i]=1;
    30             __int64 temp=0;
    31             for(int j=0; j<max(len,i+1); j++)
    32             {
    33                 temp+=(bits[j]<<j);
    34             }
    35             if(temp<=r)
    36                 ans=temp;
    37             else
    38                 break;
    39         }
    40         printf("%I64d
    ",ans);
    41     }
    42     return 0;
    43 }

    一开始把bits数组定义为int了运行错误,好像是temp+=(bits[j]<<j)这一步位运算爆int 了orz~~

  • 相关阅读:
    Ubuntu系统下《汇编语言》环境配置

    GetDiskFreeSpaceEx的使用
    夏走了
    小笨妞
    项目管理怎么可以这样子!


    浪费
    查找文件夹
  • 原文地址:https://www.cnblogs.com/PJQOOO/p/4087652.html
Copyright © 2011-2022 走看看