Codeforces1325D Ehab the Xorcist
Description
给定整数 ,
求一个长度最小的数组
使得 同时
输出两行,第一行为长度,第二行为数组中的值
Solution
首先考虑无解的情况,如果在比较高的位置上数的 为 而和为 ,显然无解
所以 时无解
然后对位考虑,如果二进制最后一位的值不一样,显然无解(没有可以进位啥的)
(这里就保证 和 的奇偶性相同了吧)
然后是 的情形,这里特判一下 ,只要一行,剩下的输
首先一波操作:
令
有一种方案是 (挺神奇)
这是当下最小的情况
之后就是考虑两个数满足条件的构造了
这里有一个比较神的性质(可能是蒟蒻不知)
(证明分类讨论一下就可以)
我们发现如果满足 同时
则
再次对位考虑,如果的某一位为,那么 同时为 ,为
否则对于 没有限制( 或会有不同的结果)
所以我们看 的值
如果大于 就不满足
否则就有一组解为
Code
signed main()
{
int u=read(),v=read();
if(u>v||(u&1)!=(v&1)) return puts("-1"),0;
if(u==v){
if(!u) puts("0");
else printf("%lld\n%lld\n",1ll,u);
return 0;
}
int x=(v-u)>>1;
if(x&u) printf("3\n%lld %lld %lld",x,x,u);
else printf("2\n%lld %lld\n",x,x^u);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律