P10118 『STA - R4』And

P10118 『STA - R4』And

题意:给定 A,B,求 \(\sum y - x\),其中 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,
答案为方案数乘上 \(2^i\)\(ans = 2 ^ {popcount(C) - 1} \cdot 2 ^ i\)

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';
}
posted @ 2024-02-02 18:57  Lu_xZ  阅读(8)  评论(0编辑  收藏  举报