P10118 『STA - R4』And

P10118 『STA - R4』And

题意:给定 A,B,求 yx,其中 x,y 满足:

  • x < y
  • x + y = A
  • x & y = B

对于加运算和与运算,有 x + y = 2(x & y) + (x ^ y)。
那么令 C = x ^ y = A - 2B。
这里判断下无解情况,

  • C < 0, 显然无解。
  • C ^ B != 0,与位运算性质矛盾,无解。

因为 x & y = B,所以 B 为 1 的位置 x,y 也为 1。
现在只需讨论 C 中的 1 如何分配。

  • 最高位的 1 一定给 y。
  • 将合法方案的非最高位取反后仍是合法的。


x = 0 _ 1 1 0 0 _ _,y = 1 _ 0 0 1 1 _ _
x'= 0 _ 0 0 1 1 _ _,y'= 1 _ 1 1 0 0 _ _

_ 为 B 的部分

因此非最高位的贡献一定会被消去。
设 C 的最高位是 i,
答案为方案数乘上 2ians=2popcount(C)12i

void solve() {
	ll A, B; cin >> A >> B;
	ll C = A - 2 * B;
	if(C <= 0 || (B & C)) cout << "0\n"; 
	else cout << ((1ll << __popcount(C) - 1) % P) * ((1ll << 63 - __builtin_clzll(C)) % P) % P << '\n';
}

作者:Luxinze

出处:https://www.cnblogs.com/Luxinze/p/18003685

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Lu_xZ  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示