zoukankan      html  css  js  c++  java
  • Claris and XOR (数位dp)

     1 /*************************************************************************
     2 
     3 题目:    Claris and XOR(hdu 5661)
     4 链接:    http://acm.hdu.edu.cn/showproblem.php?pid=5661
     5 算法:    数位dp
     6 题意:    给出a,b,c,d四个数a<=b,c<=d,找出 a<=x<=b,c<=y<=d;
     7           使得x^y最大。输出最大值。
     8 解法:    把每个数看成2进制,从大到下一位一位判断是否能为1。
     9 
    10 *************************************************************************/
    11 
    12 #include<iostream>
    13 #include<cstring>
    14 #include<algorithm>
    15 #include<cmath>
    16 #include<cstdio>
    17 using namespace std;
    18 
    19 long long a,b,c,d,ans;
    20 void dfs(long long x,long long y,long long k)
    21 {
    22     if (k<0) return ;
    23     long long cut=pow(2,k);
    24     long long rx=x+cut;
    25     long long ry=y+cut;
    26     if (rx<=b&&c-ry<0)
    27     {
    28         ans+=cut;
    29         dfs(rx,y,k-1);
    30         return ;
    31     }
    32     if (ry<=d&&a-rx<0)
    33     {
    34         ans+=cut;
    35         dfs(x,ry,k-1);
    36         return ;
    37     }
    38     if (rx<=b&&ry<=d)
    39     {
    40         dfs(rx,ry,k-1);
    41     }
    42     else dfs(x,y,k-1);
    43     return ;
    44 }
    45 
    46 int main()
    47 {
    48     int t,n;
    49     scanf("%d",&t);
    50     while (t--)
    51     {
    52         long long q;
    53         ans=0;
    54         scanf("%I64d%I64d%I64d%I64d",&a,&b,&c,&d);
    55         q=max(b,d);
    56         for (n=0;q;n++) q/=2;   ///找最大数有几位2进制。
    57         dfs(0,0,n-1);
    58         printf("%I64d
    ",ans);
    59     }
    60 }
  • 相关阅读:
    不走弯路,就是捷径
    小白逆袭之路
    java期末设计(十三周)
    java第6次作业
    java第五次作业
    java第四次作业
    第三次作业
    第二次作业
    对异常的看法
    java学习笔记(一)
  • 原文地址:https://www.cnblogs.com/pblr/p/5382245.html
Copyright © 2011-2022 走看看