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. day15-集合

    快捷键: 先定义name,age再利用快捷键生成,Alt+shift+s +c:空参 Alt+shift+s +o:有参 Alt+shift+s +r:set&get方法Ctrl+shift+ ...

  2. scrapy 基本命令

    创建scrapy项目 scrapy startproject project_name 创建爬虫文件 scrapy genspider [-t template] <name> <d ...

  3. css 圆形头像

    方法一:背景图片(推荐) 好处是,图片长宽不等的情况下图片不会变形 .ui-photo { width: 100px; height: 100px; background: url("img ...

  4. 洛谷P2261 余数求和

    整除分块的小应用. 考虑到 k % x = k - (k / x) * x 所以把 x = 1...n 加起来就是 k * n - (k / i) * i i = 1...k(注意这里是k) 对于这个 ...

  5. Spring boot学习笔记之@SpringBootApplication注解

    @SpringBootApplication(exclude = SessionAutoConfiguration.class) public class BootReactApplication { ...

  6. Nginx上部署HTTPS + HTTP2

    Nginx上部署HTTPS依赖OpenSSL库和包含文件,即须先安装好libssl-dev(或者OpenSSL),且ln -s /usr/lib/x86_64-linux-gnu/libssl.so ...

  7. Altium Designer 17 ------ 多层板设计

    Pullback:在内电层边缘设置一个去铜边界,以保证内电层边界距离PCB边缘有一个安全间距.

  8. Centos 6.8编译安装LNMP环境

    Centos 6.8编译安装LNMP环境 参考资料: http://www.jb51.net/article/107429.htm https://phperzh.com/articles/1360 ...

  9. nodeJS 调试debug

    一. 用chrome来调试 1)运行node的时候,带上 --inspect-brk=9999 node --inspect-brk= index.js 2)打开chrome调试管理页面 3)如果没有 ...

  10. JSON与XML之间的转换

    public class JsonTest { private final Logger cLogger = Logger.getLogger(getClass()); /** * XML转JSON ...