题解 CF76D 【Plus and xor】
题解:
挺有含金量的?我觉得可以评绿。
但是其实推推性质也没啥。
可以看出,^就是不进位加法。
那么它和加法之间会有很多地方相像。具体地,按位来讲,如果两个都是0或者一1一0,加法和异或都是一样的。如果两个都是1的话,那么就会出现加法进位异或变0的情况。
如果这一位为第p位,那么加法就比异或多了
所以要求最小的x,其实只需要满足这些都是1的位都是1,其他都是0即可。
其解即为
注意特判无解情况和开unsigned longlong
代码:
#include<cstdio>
#define ull unsigned long long
using namespace std;
ull a,b;
ull ansx,ansy;
int main()
{
scanf("%llu%llu",&a,&b);
if(a<b)
{
puts("-1");
return 0;
}
if((a-b)&1)
{
puts("-1");
return 0;
}
ansx=(a-b)>>1ull;
ansy=a-ansx;
printf("%llu %llu\n",ansx,ansy);
return 0;
}