题目链接:点击查看

题目大意:给出一个 u 和一个 v ,要求构造出最短的一个数组,使得

  1. 所有元素异或的结果为 u
  2. 所有元素之和的结果为 v

输出构造的结果

题目分析:情况稍微比较复杂的一道构造题,读完题后,先根据样例特判,当 u 和 v 为 0 时,答案为 0 ,当 u 和 v 相等时,答案为 u,当 u > v 时,答案为 -1,这些根据样例的提示应该不难想

接下来我们应该构造通项,根据异或的性质, u xor u = 0,加上经过上面的筛选之后,我们可以构造一个长度为 3 的数组,其值分别为 x y y ,令 x = u ,显然满足 x ^ y ^ y = u ,现在只需要满足 u + y + y = v 就好了,解方程得到 y = ( v - u ) / 2 ,所以这里必须满足 v - u 可以被 2 整除才行,如果不能被整除那么答案就是 -1 了,到此为止所有的特判都已经完成了,但是根据样例的提示,我们发现答案会有长度为 2 的数组,这个该怎么办呢,其实经过上面的分析,我们可以发现,长度为 2 的数组其实就是 x y y 合并成了 x + y , y 了而已,这也就启发了我们的思路,我们接下来的问题就转换为了分析出什么时候可以将 x y y 合并成 x + y  y ,因为加法运算满足结合律,x + y + y 和 ( x + y ) + y 是等价的,所以我们只需要考虑什么时候 x ^ y ^ y = ( x + y ) ^ y ,同时约分掉 y 后,可以得到当 x ^ y = x + y 时满足三项可以合并为两项,到这里应该不难猜出,当且仅当 x & y == 0 时,三项可以合并为两项了

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;typedef unsigned long long ull;const int inf=0x3f3f3f3f;const int N=1e4+100;int main()
{
#ifndef ONLINE_JUDGE
//    freopen("input.txt","r",stdin);
//    freopen("output.txt","w",stdout);
#endif
//    ios::sync_with_stdio(false);LL u,v,w;scanf("%lld%lld",&u,&v);if(u>v||(u-v)%2)return 0*printf("-1\n");if(u==0&&v==0)return 0*printf("0\n");if(u==v)return 0*printf("1\n%lld\n",v);w=(v-u)/2;if((u&w)==0)return 0*printf("2\n%lld %lld\n",w,w+u);printf("3\n%lld %lld %lld\n",u,w,w);return 0;
}

CodeForces - 1325D Ehab the Xorcist(构造+异或)相关推荐

  1. Codeforces Round #628 (Div. 2) D. Ehab the Xorcist

    D. Ehab the Xorcist 题目链接-D. Ehab the Xorcist 题目大意 给定两个数字 u 和 v ,构造一个最短的序列a满足a1⊕a2⊕-⊕an=u 并且 a1+a2+-+ ...

  2. D:Ehab the Xorcist

    或许更好的阅读体验 Ehab the Xorcist 思路 刚看时确实是一脸懵,最怕的就是这种构造题了,然后细想好像能写啊. 判断不可行的条件,只有两种情况: 一.v<uv < uv< ...

  3. [codeforces 1325C] Ehab and Path-etic MEXs 绕不开的叶节点+特判

    Codeforces Round #628 (Div. 2)   比赛人数9400 [codeforces 1325C]  Ehab and Path-etic MEXs   绕不开的叶节点+特判 总 ...

  4. Codeforces 1088E Ehab and a component choosing problem(树形DP)

    Codeforces 1088E Ehab and a component choosing problem(树形DP) 题意 给一棵树,要求从中选一些联通分量,使得平均联通分量重量总和最大.如果有多 ...

  5. CodeForces - 1174D Ehab and the Expected XOR Problem(构造+思维+位运算)

    题目链接:点击查看 题目大意:给出一个 n,再给出一个 x,要求构造一个数列,满足该数列的所有子串的异或和都不等于 0 且都不等于 x,在满足上面的条件下尽可能长 题目分析:因为这个题目最终的目标是需 ...

  6. CodeForces - 1364C Ehab and Prefix MEX(贪心+构造)

    题目链接:点击查看 题目大意:给出一个数组 a ,要求构造一个数组 b ,使得 a[ i ] = MEX{ b[ 1 ] , b[ 2 ] , ... b[ i - 1 ] , b[ i ] },a[ ...

  7. Codeforces C. Ehab and Path-etic MEXs (树 / 构造 / MEX)

    传送门 题意: 给定一个 n 个节点 n−1 条边的树,要求给边重新标注边权,分别为 0,1,2-n-20,1,2-n−2 .然后使得树上任意两点 u,v的 MEX(u,v) 的最大值最小. MEX( ...

  8. Codeforces 1325C. Ehab and Path-etic MEXs(构造)

    Description You are given a tree consisting of n nodes. You want to write some labels on the tree's ...

  9. Codeforces 1276C/1277F Beautiful Rectangle (构造)

    题目链接 http://codeforces.com/contest/1276/problem/C 题解 嗯,比赛结束前3min想到做法然后rush不出来了--比赛结束后又写了15min才过-- 以下 ...

最新文章

  1. python添加行索引_python-熊猫在特定级别向多索引添加行
  2. 演讲实录丨周斌:人工智能推动新基建和数据中心的技术革新
  3. Hyperledger Composer评测
  4. 关于 Python generator(生成器)的类比
  5. ad10怎么挖铺的铜_赣州“云星公园大观”的商铺,5米层高变4.5米,开发商挖地来凑?...
  6. 服务器应用服务为何卡顿?原来是内存耗尽惹的祸!
  7. 并发编程 – Concurrent 用户指南
  8. linux原有的文件系统扩展,原来linux不用LVM也能扩展文件系统
  9. SIRIM上海,http://www.sirim-global.com
  10. Java面试技巧—如何自我介绍
  11. 流(stream)是怎么一回事
  12. LINUX tar解压到指定目录
  13. 凸包算法 Matlab实现
  14. VirtualBox安装Ubuntu教程
  15. odoo14调用akshare库报错:Fatal process out of memory: Failed to reserve memory for new V8 Isolate
  16. 【Android面试题】准备、hr面试问题总结
  17. 如何完全的卸载ArcGIS?
  18. 快闪PPT,定义PPT的全新使用方式
  19. 开启人工智能的大门,引领AI时代
  20. 全球及中国融媒体行业建设发展机遇及运营前景调研报告2021-2027年

热门文章

  1. html radio 作用域,ionic 表单输入 ion-checkbox ion-radio ion-toggle ion-spinner
  2. java树形菜单_Java构建树形菜单
  3. 集群资源分配_分析下 Node.js 关于集群的那些事
  4. MySQL高级 - SQL优化 - limit优化
  5. Parallel Old收集器
  6. ArrayBlockingQueue原理分析-put方法
  7. MyBatis 源码解读-environmentsElement()
  8. MyBatis 缓存详解-什么时候开启二级缓存?
  9. mybatis-嵌套(关联)查询/ N+1 / 延迟加载
  10. 什么是控制反转(IOC)?什么是依赖注入?