zoukankan      html  css  js  c++  java
  • hdu-5661 Claris and XOR(贪心)

    题目链接:

    Claris and XOR

    Time Limit: 2000/1000 MS (Java/Others)   

     Memory Limit: 65536/65536 K (Java/Others)


    Problem Description
    Claris loves bitwise operations very much, especially XOR, because it has many beautiful features. He gets four positive integers a,b,c,d that satisfies ab and cd. He wants to choose two integers x,y that satisfies axb and cyd, and maximize the value of x XOR y. But he doesn't know how to do it, so please tell him the maximum value of x XOR y.
     
    Input
    The first line contains an integer T(1T10,000)——The number of the test cases.
    For each test case, the only line contains four integers a,b,c,d(1a,b,c,d1018). Between each two adjacent integers there is a white space separated.
     
    Output
    For each test case, the only line contains a integer that is the maximum value of x XOR y.
     
    Sample Input
    2
    1 2 3 4
    5 7 13 15
     
    Sample Output
    6
    11
     
    题意:
     
    问a<=x<=b,c<=y<=d;最大的x^y的值是多少;
     
    思路:
     
    贪心,从高位到低位,能取到1的取1不能的取0,同时更新a,b,c,d的值;
     
    AC代码:
     
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <bits/stdc++.h>
    #include <stack>
    #include <map>
     
    using namespace std;
     
    #define For(i,j,n) for(int i=j;i<=n;i++)
    #define mst(ss,b) memset(ss,b,sizeof(ss));
     
    typedef  long long LL;
     
    template<class T> void read(T&num) {
        char CH; bool F=false;
        for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar());
        for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar());
        F && (num=-num);
    }
    int stk[70], tp;
    template<class T> inline void print(T p) {
        if(!p) { puts("0"); return; }
        while(p) stk[++ tp] = p%10, p/=10;
        while(tp) putchar(stk[tp--] + '0');
        putchar('
    ');
    }
     
    const LL mod=1e9+7;
    const double PI=acos(-1.0);
    const int inf=1e18;
    const int N=1e5+10;
    const int maxn=5e3+4;
    const double eps=1e-12;
    
    LL a,b,c,d;
    
    int main()
    {
        //freopen("in.txt","r",stdin);
        int T;
        read(T);
        while(T--)
        {
            read(a);read(b);read(c);read(d);
            LL ans=0;
            for(int i=63;i>=0;i--)
            {
                int fa=((a>>i)&1),fb=((b>>i)&1),fc=((c>>i)&1),fd=((d>>i)&1);
                if(fa!=fb&&fc!=fd){ans|=(1LL<<(i+1))-1;break;}
                else if(fa!=fb)
                {
                    ans|=(1LL<<i);
                    if(fc)
                    {
                        b=(1LL<<i)-1;
                        c-=(1LL<<i);
                        d-=(1LL<<i);
                    }
                    else 
                    {
                        a=0;
                        b-=(1LL<<i);
                    }
                }
                else if(fc!=fd)
                {
                    ans|=(1LL<<i);
                    if(fa)
                    {               
                        d=(1LL<<i)-1;
                        a-=(1LL<<i);
                        b-=(1LL<<i);
                    }
                    else 
                    {
                        c=0;
                        d-=(1LL<<i);
                    }
                }
                else
                {
                    if(fa==fc)
                    {
                        if(fa)
                        {
                            LL temp=(1LL<<i);
                            a-=temp;
                            b-=temp;
                            c-=temp;
                            d-=temp;
                        }
                    }
                    else 
                    {
                        ans|=(1LL<<i);
                        if(fa)
                        {
                            a-=(1LL<<i);
                            b-=(1LL<<i);
                        }
                        else 
                        {
                            c-=(1LL<<i);
                            d-=(1LL<<i);
                        }
                    }
                }
            }
            print(ans);
        }
        return 0;
    }
    

      

  • 相关阅读:
    LCA+线段树/树状数组 POJ2763 Housewife Wind
    图论 洛谷P2052 道路修建
    动态规划 洛谷P2365 任务安排
    GCD问题 洛谷P1372 又是毕业季I & P1414 又是毕业季II
    动态规划 洛谷P1140 相似基因
    动态规划 洛谷P1868 饥饿的奶牛
    动态规划 P1280 尼克的任务
    倍增LCA BZOJ1776 cowpol奶牛政坛
    P1416 攻击火星
    搜索 洛谷 P1434滑雪
  • 原文地址:https://www.cnblogs.com/zhangchengc919/p/5759259.html
Copyright © 2011-2022 走看看