zoukankan      html  css  js  c++  java
  • 计算机学院大学生程序设计竞赛(2015’12)Bitwise Equations

    Bitwise Equations

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 633    Accepted Submission(s): 335


    Problem Description
    You are given two positive integers X and K. Return the K-th smallest positive integer Y, for which the following equation holds: X + Y =X | Y
    Where '|' denotes the bitwise OR operator.
     

    Input
    The first line of the input contains an integer T (T <= 100) which means the number of test cases. 
    For each case, there are two integers X and K (1 <= X, K <= 2000000000) in one line.
     

    Output
    For each case, output one line containing the number Y.
     

    Sample Input
    3 5 1 5 5 2000000000 2000000000
     

    Sample Output
    2 18 16383165351936
     

    总是望着曾经的空间发呆,那些说好不分开的朋友不在了,转身,陌路。 熟悉的,安静了, 安静的,离开了, 离开的,陌生了, 陌生的,消失了, 消失的,陌路了。快哭了

    #include <string.h>
    #include <iostream>
    using namespace std;
    long long rets=0;
    class jisuan
    {
    public:
        long long kthPlusOrSolution(int, int);
        string getBin(int);
    };
    string jisuan::getBin(int x)
    {
        string ret="";
        if(x==0)
        {
            ret="0";
            return ret;
        }
        while(x>0)
        {
            ret=char(x%2+'0')+ret;
            x/=2;
        }
        return ret;
    }
    long long jisuan::kthPlusOrSolution(int x, int k)
    {
        string strx, strk;
        strx=getBin(x);
        strk=getBin(k);
        int lx=strx.length()-1;
        int lk=strk.length()-1;
        string ret="";
        while(lx>=0 && lk>=0)
        {
            if(strx[lx]=='1')
            {
                ret="0"+ret;
                --lx;
            }
            else
            {
                ret=strk[lk]+ret;
                --lx;
                --lk;
            }
        }
        while(lk>=0)
            ret=strk[lk--]+ret;
        for(int i=0;i<(int)ret.length();i++)
            rets=(rets<<1)+ret[i]-'0';
        return rets;
    }
    int main()
    {
        int n,x,k;
        jisuan bit;
        cin>>n;
        while(n--)
        {
            rets=0;
            cin>>x>>k;
            bit.kthPlusOrSolution(x,k);
            cout<<rets<<endl;
        }
    }
    

    @执念  "@☆但求“❤”安★ 下次我们做的一定会更好。。。。吐舌头

    为什么这次的题目是英文的。。。。QAQ...哭

    ------------------- 这是千千的个人网站哦! https://www.dreamwings.cn -------------------
  • 相关阅读:
    核心编程笔记8——用户模式下的线程同步
    核心编程随笔7——线程调度和优先级
    深入浅出mfc随笔——MFc程序的生死因果
    opengl
    核心编程6——线程
    深入浅出mfc学习笔记——六大关键技术之仿真_运行时和动态创建
    深入浅出mfc学习笔记——六大关键技术仿真_Persistence(永久保存)
    Gdi+编程
    深入浅出mfc学习笔记1
    file open等待事件
  • 原文地址:https://www.cnblogs.com/im0qianqian/p/5989697.html
Copyright © 2011-2022 走看看