• 【题解】Ehab the Xorcist


    (color{red}{Link})

    (color{blue}{ ext{Solution:}})

    题目要求构造一个最短的序列,使得异或和为(u),数列和为(v).

    那么,因为是异或,所以最终序列的(u)对应的二进制位一定出现了奇数次,其他一定是偶数次。

    显然(u,v)奇偶性不同或是(u>v)则无解。异或和显然小于数列和。

    (u=v)时,输出一个数(u)即可。

    (u ot= v)时,考虑下面情况:

    (delta=v-u,h=frac{delta}{2})

    ( ext{h&u}=0)则输出两个数(h, ext{u^h})。因为此时( ext{u^h}=u+h,u+h+h=u+delta=v, ext{u^h^h=u}.)

    否则,输出三个数(h,h,u)即可。这个显然。且一定不存在两个数的解法。

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll n,a[500000],u,v,cnt;
    
    int main(){
    	scanf("%lld%lld",&u,&v);
    	ll dt=v-u;
    	if(u==v&&u==0){
    		puts("0");
    		return 0;
    	}
    	if(dt<0||(dt&1)){
    		puts("-1");
    		return 0;
    	}
    	else if(dt==0){
    		cout<<1<<endl<<u<<endl;
    		return 0;
    	}
    	else{
    		long long h=dt>>1;
    		if(!(h&u))cout<<2<<endl<<h<<" "<<(h^u)<<endl;
    		else cout<<3<<endl<<h<<" "<<h<<" "<<u<<endl;
    	}
    	return 0;
    }
    
  • 相关阅读:
    No.2 对象与内存控制(内存分配)
    No.1 数组与内存控制
    Json解析 在VS中
    MVC 搜索防止点击其他按钮
    执行多个lanmada表达式查询
    删除重复数据
    分页
    DataSet与二进制文件和XML文件
    关于时间的转换
    转换人民币大小金额
  • 原文地址:https://www.cnblogs.com/h-lka/p/13111807.html
Copyright © 2020-2023  润新知