zoukankan      html  css  js  c++  java
  • 【Codeforces Round #628 (Div. 2) D】Ehab the Xorcist

    题目链接

    【题目翻译】

    给你两个整数u和v,让你构造一个数组,使得这个数组的异或和为u,数字之和为v。 求最短的数组。以及他们的各个元素。

    【题解】

    几个特殊的判断: 0.u和v的奇偶性不同,因为如果只看每个数字二进制最后一位的话,在这一位上进行加法或者是异或操作,得到的结果肯定都是一样的。所以不可能 说两个出来的结果不同。 1.u>v,则肯定无解,因为a+b=a^b+2*(a&b),因此数字之和肯定大于异或和。 2.u=v,若u!=0,则直接输出一个u,为0的话输出0就好。 3.剩余的情况就是u

    【代码】

    #include<bits/stdc++.h>
    #define ll long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    using namespace std;
    
    const int N = 2e5;
    
    ll u,v;
    
    int main(){
        #ifdef LOCAL_DEFINE
            freopen("D:\rush.txt","r",stdin);
        #endif
        scanf("%lld%lld",&u,&v);
        if (u%2!=v%2){
            puts("-1");
            return 0;
        }
        if (u>v){
            puts("-1");
        }else if (u==v){
            if (u==0){
                puts("0");
            }else{
                printf("1
    %lld",u);
            }
        }else if (u<v){
            ll x = v-u;
            x/=2;
            if ((u&x)==0){
                printf("2
    %lld %lld",u+x,x);
            }else{
                printf("3
    %lld %lld %lld",u,x,x);
            }
        }
        return 0;
    }
    
    
  • 相关阅读:
    函数如何命名
    jsp/servlet
    hibernate主键生成策略
    Java项目经验(ssh)
    jvm的内存区划分
    @Override
    Java成长简介(转载)
    接口 转载
    SpringBoot项目jar、war方式的部署
    服务注册与发现及其优雅停服
  • 原文地址:https://www.cnblogs.com/AWCXV/p/12944291.html
Copyright © 2011-2022 走看看