627 A codeforces

来源:互联网 发布:图书馆数据库设计报告 编辑:程序博客网 时间:2024/06/09 18:32

 给出   a+b 的值 , a^b 的值

 求    a  b  ,满足的条件有多少种

        a+b  =  a^b +(a&b)*2

       证明: 

        a :    1 0 0 1 1 

       b:         1 0 1 0

    a+b:     1 1 1  0 1

    a^b:      1 1 0 0  1 

  由于 a^b 会使 的其所在位变为0 ,所以减少了 1<<位数,即 (a&b *2 

#include<bits/stdc++.h>using namespace std;int main(){    __int64 a,b;    scanf("%I64d%I64d",&a,&b);   __int64 ans = 1;    int gf = 0;    if(a==b)        gf  = -2;    if( a - b>=0&&(a-b)%2==0)    {        __int64 x=  (a-b)/2;        int cot = 0;        int flag= 1;        while(b)        {            if(b%2)            {                if(x%2)                {                    flag = 0;                }                ans = ans*2;            }            if(!flag)                break;            x=x/2;            b = b/2;        }        if(!flag)        {            cout<<"0"<<endl;            return 0;        }        printf("%I64d\n",ans+gf);    }    else    {        printf("0\n");    }}

0 0
原创粉丝点击