题目:https://ac.nowcoder.com/acm/contest/5929/D
看了题解发现这道题和cf一道题一模一样,还是我做过的比赛,结果自己毫无印象。。。
1.x>y时无解,异或是不进位的加法 结果不会比加法大
2.x=y是 当x=0是结果为0 否则结果唯一
3.x和y的奇偶性不同时无解
因为异或不会对x二进制数的最小位产生影响(没有更小的位进位)
最小位相同,奇偶性相同
4.奇偶性相同的数都可以写成 x^ t ^t=x (t=(y-x)/2) x+t+t=y 结果为最大3
当 x^t=x+t (相当于x&t==0 也就是这两个数相加没有进位)时,结果是2。
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int x,y;
while(scanf("%d%d",&x,&y)!=EOF)
{
if(x>y)
{
printf("-1\n");
}
else if(x==y)
{
if(x==0)
printf("0\n");
else printf("1\n");
}
else if(!(x%2==0&&y%2==0||x%2&&y%2))
{
printf("-1\n");
}
else
{
if((((y-x)/2)&x)==0)
{
printf("2\n");
}
else printf("3\n");
}
}
}

本文深入解析了一道关于异或运算的编程竞赛题目,详细阐述了解题思路和关键步骤,包括判断解的存在性及解的唯一性。通过分析x与y的关系,探讨了异或运算的性质,如奇偶性的影响、大小比较以及特定条件下的结果计算。最后提供了完整的C++代码实现。
674

被折叠的 条评论
为什么被折叠?



