CodeForces-Vlad and a Pair of Numbers

题目

题意简述

找两个整数 \(a\)\(b\),满足以下规则。

  • \(a + b = x \times 2\)

  • \(a \operatorname{xor} b = x\),其中 \(\operatorname{xor}\) 指异或。

做题思路

不妨在草稿纸上画画样例。

对于最终某位异或是一的地方,我们明白两个数只能一方此位是一,那么对于零就不一定了,然后我们可以思考,既然最终异或要等于 \(36\),那么不妨让其中一个数先为 \(36\),然后再后续调整,此时剩余可支配的数值为 \(36\)

这里要记住,我们只能在 \(xor\) 那一栏数位为 \(0\) 的上面进行分配,每分配一个 \(1\) 的时候,两个数位都要有 \(1\),否则就别分配,最终分配完了剩余值,如果对于另一个数(没有给初始 \(36\) 的那个数字)不会和 \(x\) 进行数位冲突就是 \(&\)\(1\),那就是正确的。

	int shenyu=x/2;
	int w=shenyu&x;
	if(w==0)
	{
		cout<<x+shenyu<<" "<<shenyu<<endl;
		return ;
	}
	else{
		cout<<-1<<endl;
		return ;
	}
posted @ 2025-04-16 19:56  LteShuai  阅读(8)  评论(0)    收藏  举报