题解Ehab the Xorcist

Posted h-lka

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解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;
}

以上是关于题解Ehab the Xorcist的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces1325D Ehab the Xorcist

Codeforces 1325D - Ehab the Xorcist

CodeForces 1325D - Ehab the Xorcist构造+思维

Codeforces - 1325D - Ehab the Xorcist(构造)

CodeForces 1325D Ehab the Xorcist(异或和+算数和)

Codeforces Round #628 (Div. 2) D. Ehab the Xorcist(异或,思维题)