首页 > 其他 > 详细

「D. Ehab the Xorcist」

时间:2020-03-16 13:32:56      阅读:62      评论:0      收藏:0      [点我收藏+]

题目大意

给你两个数 u v,要求找出一个数组,里面的元素满足几个条件 

元素之和==v

元素之异或==u

做法

三个数:

根据u^0==u  同时知道两个相同的数异或为0 ,可以把0换成(v-u)/2 和 (v-u)/2 ;因此,最多只需要三个数(v-u)/2,(v-u)/2,u;

两个数:

把上边的三个元素种的u和其中一个(v-u)/2合并 就得到了两个数,(v-u)/2,(v+u)/2可知如果这连个数字满足要求那么就只需要两个数。

特判:

当u==v&&v!=0 输出v 

当u==v&&v==0输出0

当(v-u)%2||v<u输出-1;

http://codeforces.com/contest/1325/problem/D传送门

代码:

#include<bits/stdc++.h>
using namespace std;
int main(){
    long long u,v;
    cin>>u>>v;
    if(u==v&&v!=0){
        cout<<1<<endl<<v<<endl;
    }
    else if(u==v&&v==0){
        cout<<0<<endl;
    }
    else if((v-u)%2||v<u){
        cout<<-1<<endl;
    }
    else {
        if((((v-u)/2)^((v+u)/2))==u){
            cout<<2<<endl;
            cout<<(v-u)/2<<" "<<(v+u)/2<<endl;
        }
        else{
            cout<<3<<endl;
            cout<<u<<" "<<(v-u)/2<<" "<<(v-u)/2<<endl;
        }
    }
} 

 

「D. Ehab the Xorcist」

原文:https://www.cnblogs.com/LH2000/p/12503125.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!