位运算笔记
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了位运算笔记相关的知识,希望对你有一定的参考价值。
位运算笔记
性质1: ( x + y ) = ( ( x & y ) < < 1 ) + ( x ⊕ y ) \\large (x+y)=((x\\& y)<<1)+(x\\oplus y) (x+y)=((x&y)<<1)+(x⊕y)
性质2: ( x + y ) (x+y) (x+y) 与 ( x ⊕ y ) (x\\oplus y) (x⊕y) 奇偶性相同
性质3: ( x + y ) ≥ ( x ⊕ y ) (x+y)\\ge (x\\oplus y) (x+y)≥(x⊕y)
性质4: ( x + y ) = ( x ⊕ y ) (x+y)=(x\\oplus y) (x+y)=(x⊕y) 等且仅当 ( x & y = 0 ) (x\\& y=0) (x&y=0)
异或运算相当于不进位加法。
所以性质3得证。
且从性质1我们知道 △ = [ ( x + y ) − ( x ⊕ y ) ] ( m o d 2 ) = 0 \\triangle=[(x+y)-(x\\oplus y)]\\pmod{2}=0 △=[(x+y)−(x⊕y)](mod2)=0
所以性质2得证。
D. Plus and xor
给定两个数 A + B A+B A+B 的和 X X X ,异或和 Y Y Y ,求 ( A , B ) (A,B) (A,B) 是否存在以及 A A A的最小非负整数解。
利用性质2和3判有解,然后利用性质构造 A = X − Y 2 , B = X − A A=\\dfrac{X-Y}{2},B=X-A A=2X−Y,B=X−A
注意此时 A ⊕ B A\\oplus B A⊕B 不一定等于 Y Y Y。
我们可以这样理解:
X − Y 2 + X − Y 2 + Y = X \\dfrac{X-Y}{2}+\\dfrac{X-Y}{2}+Y=X 2X−Y+2X−Y+Y=X
X − Y 2 ⊕ X − Y 2 ⊕ Y = X \\dfrac{X-Y}{2}\\oplus \\dfrac{X-Y}{2}\\oplus Y=X 2X−Y⊕2X−Y⊕Y=X
B = X − Y 2 + Y , B = X − Y 2 ⊕ Y B=\\dfrac{X-Y}{2}+Y,B=\\dfrac{X-Y}{2}\\oplus Y B=2X−Y+Y,B=2X−Y⊕Y
则要求: X − Y 2 + Y = X − Y 2 ⊕ Y \\dfrac{X-Y}{2}+Y=\\dfrac{X-Y}{2}\\oplus Y 2X−Y+Y=2X−Y⊕Y
则根据性质4 X − Y 2 & Y = 0 \\dfrac{X-Y}{2}\\& Y=0 2X−Y&Y=0
只有满足该条件才能构造出解。
code
int main(){
ull x,y;scanf("%llu%llu",&x,&y);
ll z=(x-y)>>1;
if( x<y || (x-y)&1 || z&y ) return puts("-1"),0;
else printf("%llu %llu\\n",z,x-z);
return 0;
}
性质5: ( x & y ) + ( x ∣ y ) = ( x + y ) (x\\& y)+(x|y) =(x+y) (x&y)+(x∣y)=(x+y)
F. Anton and School
构造出 A A A。
性质5: ( x & y ) + ( x ∣ y ) = ( x + y ) (x\\& y)+(x|y) =(x+y) (x&y)+(x∣y)=(x+y)
可用数学归纳法证明。
因此:
令 d i = b i + c i = n a i + ∑ i = 1 n a i \\large d_i=b_i+c_i= na_i+\\sum\\limits_{i=1}^n a_i di=bi+ci=nai+i=1∑nai
t
o
t
=
∑
i
=
1
n
a
i
=
∑
i
=
1
n
d
i
2
n
=
n
∑
i
=
1
n
a
i
+
n
∑
i
=
1
n
a
i
2
n
tot=\\large \\sum\\limits_{i=1}^n a_i=\\dfrac{\\sum\\limits_{i=1}^n d_i}{2n}=\\dfrac{n\\sum\\limits_{i=1}^n a_i+n\\sum\\limits_{i=1}^na_i}{2n}
tot=i=1∑nai=2ni=1∑ndi=2nni=1∑nai+ni=1∑n