https://codeforces.com/contest/1325/problem/D
菜不成声.jpg
写了个假做法还觉得巨对,一直wa18,这题关键是想到异或和和加法和奇偶性相同,那么最多3个就能解决,u,(v-u)/2,(v-u)/2
然后2个的情况就是,如果u和(v-u)/2二进制没有一位是相同的,那么(v-u)/2可以合并进入u,
1个的情况就是1个,再写写别的特殊情况
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxl=64;
ll u,v,a,b,c,d;
int main()
{
scanf("%lld%lld",&u,&v);
if(u>v || (v-u)%2!=0)
return 0*puts("-1");
if(u==v && u==0)
return 0*puts("0");
if(u==v)
return 0*puts("1")*printf("%lld",u);
d=v-u;
b=d/2;a=u^b;
if(a+b==v)
return 0*puts("2")*printf("%lld %lld",a,b);
puts("3");
printf("%lld %lld %lld",u,d/2,d/2);
return 0;
}
本文详细解析了Codeforces比赛中的D题,分享了一个高效的解题思路。关键在于理解异或和与加法和的奇偶性一致,通过巧妙地利用这一点,最多只需要3个数就能解决问题。文章提供了完整的代码实现,包括特殊情况的处理。
5312

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



