博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
汕头市队赛 SRM 09 B 撕书
阅读量:6573 次
发布时间:2019-06-24

本文共 1172 字,大约阅读时间需要 3 分钟。

B 撕书II-3 SRM 09

背景&&描述

    琉璃手头有一黑一白两本魔法书,一本是《缟玛瑙的不在证明》,另一本是《白色相簿1.5》

    传说同时打开这两本书会有奇怪的事情发生。
    琉璃打开一看,果然非常奇怪:两本书上都各自写着一个正整数(可能他买到盗版了),分别是a和b。
    试图撕书的汀想借过来看看,但琉璃只告诉了他这俩数加起来的值x和异或起来的值y。
    汀发现有很多种(a,b)满足琉璃告诉他的信息...你能帮他算出来有多少种吗?

 

输入格式

两个用空格隔开的整数x和y。

输出格式

一个整数,表示有多少种情况。

样例输入

9 5

样例输出

4

数据范围与约定

  • 对于100%的数据:2\leq x\leq 10^{12},0\leq y\leq 10^{12}

样例解释

四种分别为(2,7),(7,2),(3,6),(6,3)

——————————————————————————————

这道题是关于异或性质的题 以前没涉及过写得很困难 少推了一点性质QAQ过于蒟蒻啊

cyc大爷原话:

  异或是不进位加法,知道这点其它就很容易了

   异或最重要的性质之一就是这个
  不进位是针对每一位的
  这些1可以通过(x-y)>>1体现出来

这样我们找到所有的进位位置

如果这一位(二进制位)是要进位的那么y在这一位的值一定是0 因为1^1=0

这样筛完解是0的情况后 

我们统计y是1的位数(仍为二进制位) k

答案就是2^k辣 不过如果x==y要-2 因为题目要求是正整数 而这种情况下存在0和x的情况

#include
#include
#include
#define LL long longusing namespace std;LL read(){ LL ans=0,f=1,c=getchar(); while(c<'0'||c>'9'){
if(c=='-') f=-1; c=getchar();} while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();} return ans*f;}LL x,y,c,ans=1;int main(){ x=read(); y=read(); c=x-y; if(c&1||x
>=1; for(int i=0;(1LL<
<=c;i++) if(c&(1LL<
<
View Code

 

转载于:https://www.cnblogs.com/lyzuikeai/p/7282590.html

你可能感兴趣的文章
关于网站注册账号时提示Server 对象 错误 'ASP 0177 : 800401f3'
查看>>
Authentication failure
查看>>
配置使用Powershell管理Azure Stack
查看>>
我的友情链接
查看>>
python中的字符串
查看>>
如何开启MySQL的慢查询日志
查看>>
函数函数
查看>>
sort_uniq.sh
查看>>
隆冬寒骨,风吹十一豪迈
查看>>
ConcurrentHashMap内部原理浅析
查看>>
redis.conf
查看>>
我的友情链接
查看>>
php底层运行机制(二)
查看>>
单用户模式
查看>>
修复微商城提交购物车时部分手机号码不识别
查看>>
我的友情链接
查看>>
nginx+keepalived构建主备负载均衡代理服务器
查看>>
强大的日志分析工具AWStats经典备忘
查看>>
java类的加载,链接,初始化
查看>>
使用Zabbix2.2自带的Mysql监控模板监控数据库
查看>>