D. Ehab the Xorcist(纯构造方法)
\(如果觉得下面难以理解,可以去这里看一种较为简单的解法\):saf
\(这个题嘛,首先要明确异或的性质:相同为0,不同为1.\)
\(举个例子,我们来构造u=15和v=127的情况\)
\(注意到,异或是二进制,我们把15的二进制写下来\)
\]
\(\color{Red}{说明什么?说明至少二进制的1,2,3,4位数字出现了奇数次,二进制的其他位出现了偶数次。}\)
\(你问我为什么?请看异或的定义,假如出现偶数次1相异或,仍然为0.\)
\(那么我们可以构造出最终数列中,二进制的某一位出现过多少次1.\)
\(基于贪心的思想,我们从二进制的62位开始构造。用当前的v整除{2^i}\)
\(如果在15中出现过这一位,说明我们想构造奇数次,假如除数是偶数就-1\)
\(如果在15没出现过,说明我们想构造偶数次,假如是奇数就-1\)
\(然后每一次都v都减去构造的数字\)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll u,v,a[64],vis[64],ans[109],num[109],cnt,xu;
bool work()
{
ll minn=1e18,shu=0;
for(int i=1;i<=62;i++)
if(vis[i])
minn=min(minn,vis[i]);//找出出现次数最少的
if(minn==1e18) return false;//已经可以输出了
for(int i=1;i<=62;i++)
{
if(vis[i]==0) continue;
vis[i]-=minn,shu+=a[i];//都加上去
}
ans[++cnt]=shu,num[cnt]=minn,xu+=minn;
return true;
}
int main()
{
a[1]=1;
for(int i=2;i<=62;i++) a[i]=a[i-1]*2;//二进制的额每一位代表的数
cin>>u>>v;
for(int i=1;i<=62;i++)
if(u&a[i])//标记是否在u出现过
{
vis[i]=1;//出现过那么至少要有一次
v-=a[i];
}
if(v<0) cout<<-1,exit(0);
for(int i=62;i>=1;i--)
{
ll z=v/a[i];
if(z==0) continue;
if(z%2==1&&vis[i]) z--;//出现过应该构造奇数
if(z%2==1&&!vis[i]) z--;//没出现过应该构造偶数
vis[i]+=z;
v-=a[i]*z;
}
if(v!=0) cout<<-1,exit(0);
while(work()) continue;//贪心构成数字
cout<<xu<<endl;
for(int i=1;i<=cnt;i++)
for(int j=1;j<=num[i];j++)
cout<<ans[i]<<" ";
}
D. Ehab the Xorcist(纯构造方法)的更多相关文章
- D. Ehab the Xorcist
题意: 略: 感觉被演了一波,这是CFdiv2吗? 算是这个构造题吧. 1 首先我们可以将u进行二进制拆分来考虑.加入u>v那么小与v的那些数在怎么拼接也无法使异或值为u. 比如二进制U=1 0 ...
- 【题解】Ehab the Xorcist
\(\color{red}{Link}\) \(\color{blue}{\text{Solution:}}\) 题目要求构造一个最短的序列,使得异或和为\(u\),数列和为\(v\). 那么,因为是 ...
- Codeforces Round #628 (Div. 2) D. Ehab the Xorcist(异或,思维题)
题意: 寻找异或后值为 u,相加后和为 v 的最短数组. 思路: 异或得 u ,则 v 至少应大于等于 u ,且多出来的部分可以等分为两份相消. 即初始数组为 u , (v-u)/2 , (v-u)/ ...
- Codeforces Round #628 (Div. 2)
1325A - EhAb AnD gCd 题意:随意找两个数是他们的最大公约数 GCD 与最小公倍数 LCM 之和为所给定的值. 思路:找一下规律 ,假设所给的 数位n, 那么我们将n分成 1 ,n- ...
- Codeforces Round #628 (Div. 2) 题解
人闲桂花落,夜静春山空. 月出惊山鸟,时鸣春涧中.--王维 A. EhAb AnD gCd You are given a positive integer x. Find any such 2 po ...
- ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布局
本文转自 :http://www.cnblogs.com/wendingding/p/3761730.html ios开发UI篇—使用纯代码自定义UItableviewcell实现一个简单的微博界面布 ...
- iOS高仿app源码:纯代码打造高仿优质《内涵段子》
iOS高仿app源码:纯代码打造高仿优质<内涵段子>收藏下来 字数1950 阅读4999 评论173 喜欢133 Github 地址 https://github.com/Charlesy ...
- Spring 使用纯注解方式完成IoC
目录 创建一个简单的Person类 使用xml方式配置Spring容器并获取bean的过程 创建xml配置文件 进行测试 使用纯注解方式配置Spring容器并获取bean的过程 创建spring配置类 ...
- 牛客网刷题(纯java题型 31~60题)
牛客网刷题(纯java题型 31~60题) 重写Override应该满足"三同一大一小"三同:方法名相同,参数列表相同,返回值相同或者子类的返回值是父类的子类(这一点是经过验证的) ...
随机推荐
- 2、使用断言(json assertion)
1.假设现在有一个服务端的返回数据(需要测试的)为:HTTP/1.1 200 OK,要测试的响应字段勾选Response Headers,模式匹配规则选择Substring,把该响应断言命名为Http ...
- Tomcat启动过程原理详解 -- 非常的报错:涉及了2个web.xml等文件的加载流程
Tomcat启动过程原理详解 发表于: Tomcat, Web Server, 旧文存档 | 作者: 谋万世全局者 标签: Tomcat,原理,启动过程,详解 基于Java的Web 应用程序是 ser ...
- AJ学IOS 之微博项目实战(7)程序启动新特性用UICollectionViewController实现
AJ分享,必须精品 一:效果 这里实现了大多数app都会有的软件新特性的功能,用的是UICollectionViewController实现的 二:思路 这里用了UICollectionViewCon ...
- 给学妹的 Java 学习路线
大家好,这篇文章主要是讲解下如何自学 Java,这个问题有很多粉丝私信问过,今天又有直系学妹问我如何学习 Java? 我就以我的经历,总结下分享给大家,有不当指出或者有更好的方法建议也欢迎留言指出,大 ...
- Spring Data REST不完全指南(一)
简介 Spring Data REST是Spring Data项目的一部分,可轻松在Spring Data存储库上构建超媒体驱动的REST Web服务. Spring Data REST 构建在 Sp ...
- 小程序运行时如何助力传统APP转型?
小程序和H5或者RN有什么区别?优越性在哪里? 长期以来,移动互联网界一直在寻找一种既能获得Native原生的体验,又可以低门槛快速开发的技术.在这个过程中出现了很多尝试,例如React Native ...
- L7过拟合欠拟合及其解决方案
1.涉及语句 import d2lzh1981 as d2l 数据1 : d2lzh1981 链接:https://pan.baidu.com/s/1LyaZ84Q4M75GLOO-ZPvPoA 提取 ...
- C - 剪花布条 (KMP例题)
一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Input输入中含有一些数据,分别是成对出现的花布条和 ...
- tortoise 设置beyond Compare比较工具
1.桌面右击tortoiseSVN->setting->Diff Viewer面板,选择external,选中beyond Compare路径
- 下载mp4文件
实现mp4文件的下载,而不是在线播放 <!DOCTYPE html> <html lang="en"> <head> <meta char ...