zoukankan      html  css  js  c++  java
  • 「D. Ehab the Xorcist」

    题目大意

    给你两个数 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;
            }
        }
    } 
    rush!
  • 相关阅读:
    os模块
    sys模块
    psutil模块
    subprocess模块
    time模块
    argparse模块
    tcp端口扫描(python多线程)
    基于http的软件仓库
    SRE思想
    redis哨兵模式
  • 原文地址:https://www.cnblogs.com/LH2000/p/12503125.html
Copyright © 2011-2022 走看看