zoukankan      html  css  js  c++  java
  • hdu 5969

    http://acm.hdu.edu.cn/showproblem.php?pid=5969

    题目:在l->r的范围内找x,y。求x|y最大

    思路:把l,r分解成二进制,那么我们的目的就是使1尽量的多,这里我们可以枚举l,r的二进制,当他们第一个出现不同的时候,把这个后面的全部置为1即可

    因为从这个位置开始的全部为1的二进制的范围一定是在l,r之间的

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 int main()
     5 {
     6     int t;
     7     long long l,r;
     8     scanf("%d",&t);
     9     long long  a[100];
    10     a[0] = 1;
    11     for(int i = 1;i<64;i++)
    12         a[i] = 2*a[i-1];
    13     bool posa[64];
    14     bool posb[64];
    15     long long ans;
    16     while(t--)
    17     {
    18         scanf("%lld%lld",&l,&r);
    19         memset(posa,false,sizeof(posa));
    20         memset(posb,false,sizeof(posb));
    21         ans = 0;
    22         for(int i=62;i>=0;i--)
    23         {
    24             if(a[i]+ans<=r){
    25                 ans+=a[i];
    26                 posa[i] = true;
    27             }
    28         }
    29         ans = 0;
    30         for(int i = 62;i>=0;i--)
    31         {
    32             if(a[i]+ans<=l){
    33                 ans+=a[i];
    34                 posb[i] = true;
    35             }
    36         }
    37         ans = 0;
    38         for(int i = 62;i>=0;i--)
    39         {
    40             if(ans)
    41                 posa[i] = true;
    42             else if(posa[i]!=posb[i])
    43                 ans++;
    44         }
    45         ans = 0;
    46         for(int i = 62;i>=0;i--)
    47             if(posa[i])
    48                 ans+=a[i];
    49         printf("%lld
    ",ans);
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    2019ICPC上海站
    “浪潮杯”第九届山东省ACM大学生程序设计竞赛重现赛(2018)
    集合问题
    后缀数组
    141. 周期(KMP)
    求和(矩阵快速幂)
    大数(KMP)
    1270: [蓝桥杯2015决赛]完美正方形
    AC自动机
    8.26作业
  • 原文地址:https://www.cnblogs.com/Tree-dream/p/7486989.html
Copyright © 2011-2022 走看看