CF1325D Ehab the Xorcist

Jisoo

首先可以意识到,对于这个数组,他的异或和一定不会超过数值和

所以说 \(u>v\) 直接挂了

然后意识到,区间和的奇偶性和异或和是一样的,(看第一位),这样\(u!=v\)也不行

剩下的呢,可以直接构造 \(u,\frac{v-u}{2},\frac{v-u}{2}\)(已经保证了分子为偶数)

然后能不能更少呢?看一下能不能把 \(\frac{u-v}{2}\)\(u\)合并就可以了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lll long long
using namespace std;
lll u,v;
lll cha;
int main(){
	cin>>u>>v;
	cha=v-u;
	if(cha<0||(cha&1)){
		printf("-1");
		return 0;
	}
	if(u==v){
		if(u==0){
			printf("0");
			return 0;
		}
		else{
			printf("1\n%lld",u);
		}
		return 0;
	}
	lll ha=cha/2;
	if((ha&u)==0){
		printf("2\n%lld %lld",ha,ha^u);
	}else{
		printf("3\n%lld %lld %lld",ha,ha,u);
	}
	return 0;
}
posted @ 2021-09-27 11:46  Simex  阅读(30)  评论(0编辑  收藏  举报