Description

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

Input

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

Output

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

Sample Input

9 5

Sample Output

4

写了比较详细的代码注释……

(写题解的时候突然发现自己的写法又蠢又啰嗦啊,但写都写了就随意发咯(逃),大家看着玩就好了QAQ

 //比赛完葱神提到了异或的一条很重要的性质:异或是不进位加法
//另,ll很重要!!!!!
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#define ll long long
using namespace std;
ll x,y,t,tt,ans,nn;
int cnt,now,p[];
bool f[],fl;
ll read()
{
ll x=,f=;char c=getchar();
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int main()
{
x=read();y=read();t=y;
while(t)//一位一位拆了y
{
if(t&)nn++,f[now]=true;//统计1出现的次数,并将其位置打上标记
else p[++cnt]=now;//记录0出现的位置
t>>=;now++;
}
if(x==y){printf("%lld",((ll)<<nn)-);return ;}
//如果x==y,则说明a+b时没有出现进位的情况;
//此时统计1出现的次数nn,则a和b总共有2^nn个组合;
//其中有2个组合为0和x,不满足题意,减掉之后直接输出结果
while((ll)<<now<x)p[++cnt]=now,now++;//将0的位置补满直到1<<now>x为止
nn=(ll)<<nn;
//y中1的位置上,a和b必然是一个为0,一个为1
//所以在确定y中0的位置上a、b相同位置上的数之后,会增加2^nn个答案
//接下来要确定y中0的对应位置上a、b的数
//枚举y中0的位置p,强制位置p上a、b皆为1,位置<p的位置上a、b皆为0,这是为了防止重复
for(int i=;i<=cnt;i++)
{
t=((ll)<<(p[i]+))+y;//先加上强制a、b位置p[i]上皆为1的值
if(t>x)break;//大于x,直接跳出循环
fl=false;now=;tt=x-t;
if(tt%)continue;
//每一次强制a、b某位置上为1都会同时增加a、b的值,所以差值一定为偶数
//根据差值可以推断出哪个位置上a、b同为1
tt>>=;
while(tt)
{
if((tt&)==)//a、b当前位置上同为0,直接跳过
{
tt>>=;now++;
continue;
}
if(f[now]||now<=p[i]){fl=true;break;}
//如果需要a、b同为1的位置小于等于p[i]或该位置上y==1,不合法,直接跳出循环
tt>>=;now++;
}
if(!fl)ans+=nn;//根据枚举出来的状态直接更新答案
}
printf("%lld",ans);
return ;
}

【SRM-09 B】撕书II的更多相关文章

  1. 汕头市队赛 SRM 09 C 撕书

    C 撕书III-3 SRM 09 背景&&描述 琉璃双在撕书.     书总共有n页,每页都可以看作是一个数字.     琉璃读书喜欢来回地读.但他也因此发现了作者的灌水行为:有些连续 ...

  2. 汕头市队赛 SRM 09 B 撕书

    B 撕书II-3 SRM 09 背景&&描述 琉璃手头有一黑一白两本魔法书,一本是<缟玛瑙的不在证明>,另一本是<白色相簿1.5>     传说同时打开这两本书 ...

  3. 汕头市队赛 SRM 09 A 撕书

    A 撕书I-3 SRM 09 背景&&描述 琉璃在撕书.     书总共有n页,都悬浮在数轴上,第i页的位置为,上面写着一个数字.     琉璃从右往左撕书.假如看到了第i页,就把在第 ...

  4. 汕头市队赛 SRM 06 A 撕书

    A 撕书 SRM 06 背景&&描述 游行寺汀正在杀书.         书总共有n页,每页都可以看作是一个小写英文字母,所以我们可以把书看成长度为n的字符串s.         琉璃 ...

  5. ContestHunter暑假欢乐赛 SRM 09(TJM大傻逼选手再创佳绩)

    T1 f[i]为前i页最少被撕几页,用二分转移就行了,答案为ans=min(f[i]+(n-i)); 不知道为什么写挂了嗯 二分的l初始应该是0 T2 数位DP f[i][1/0][1/0][1/0] ...

  6. MSDeploy

    http://blogs.iis.net/jamescoo/default.aspx   Web Deployment Tool Now Works With Credential Store Feb ...

  7. Windows7WithSP1/TeamFoundationServer2012update4/SQLServer2012

    [Info   @09:03:33.737] ====================================================================[Info   @ ...

  8. SRM 207 Div II Level Two: RegularSeason,字符串操作(sstream),多关键字排序(操作符重载)

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=2866&rd=5853 主要是要对字符串的操作要熟悉,熟 ...

  9. SRM 577 Div II Level Two: EllysRoomAssignmentsDiv2

    题目来源: http://community.topcoder.com/tc?module=ProblemDetail&rd=15497&pm=12521 这个问题要注意的就是只需要直 ...

随机推荐

  1. [APIO2008]免费道路(生成树)

    新亚(New Asia)王国有 N 个村庄,由 M 条道路连接.其中一些道路是鹅卵石路,而其它道路是水泥路.保持道路免费运行需要一大笔费用,并且看上去 王国不可能保持所有道路免费.为此亟待制定一个新的 ...

  2. redis主从复制几种结构

    1.redis主从: 主从有好几种复制模式 一主一从:一个主服务器,一个从服务器,适合并发量较小的 一主多从:适合于读多写少的,结构: 3. 树状结构

  3. highstock+websocket实现动态展现

    效果:从后台获取回测数据,在前端动态展现,和聚宽实现的回测效果相仿 大体思路:先传一个[[int,0],[int,0],[int,0],[int,0],[int,0],...]格式的死数据到前端渲染x ...

  4. nodejs的某些api~(六)HTTPS

    node的HTTPS模块接口与HTTP其实差不多,就是多了一个认证证书,私钥的配置等等,API都相似的. 在客户端服务器通信的方法中,只有HTTPS是最安全的,它的原理是客户端和服务器发送自己的公钥, ...

  5. window无法启动mongodb服务:系统找不到指定的文件错误的解决方法

    原文:http://www.phperz.com/article/15/0530/131534.html 错误描述 错误2:系统找不到指定文件 思考过程 昨天做测试的时候,先后安装了两次MongoDB ...

  6. spring-boot-starter-redis配置详解

    spring-boot-starter-redis配置详解   spring-boot-starter-redis主要是通过配置RedisConnectionFactory中的相关参数去实现连接red ...

  7. docker 拷贝镜像文件

    1.概述 我们制作好镜像后,有时需要将镜像复制到另一台服务器使用. 能达到以上目的有两种方式,一种是上传镜像到仓库中(本地或公共仓库),但是另一台服务器很肯能只是与当前服务器局域网想通而没有公网的,所 ...

  8. 百度地图API示例:使用vue添加删除覆盖物

    1.index.html <script type="text/javascript" src="http://api.map.baidu.com/api?v=2. ...

  9. HEOI2013 Segment

    传说中的“李超树”. 大意:给你若干线段,试求横坐标x上的最上方一条线段的编号.无则输出零. 解:用线段树维护. 插入的时候保存自己这个区间上可能成为最大值的线段,被抛弃的则看情况下放. 查询时从最底 ...

  10. Django 配置QQ邮箱连接

    首先要在settings.py内进行配置 # 邮件服务配置文件 EMAIL_USE_SSL = True # 邮箱服务 EMAIL_HOST = 'smtp.qq.com' # 端口号 EMAIL_P ...