1.位運算
& 與 //&1等同於%2
| 或
~ 非
^ 異或 //不同為1,相同為0。也就可以叫不進位加法
>> 右移
<< 左移
a>>k==a/2^k
常用操作:
(1) 求x的第k位數字 x >> k & 1 //

(2) lowbit(x) ,返回x的最后一位1以及后的0,返回的數都是一個2的多少次方
-x==~x+1二進制表示負數補碼等於其原碼的反碼+1(取反+1)
int lowbit(int x)
{
return x&(-x);
}
swap(x,y) ⇒⇒ x^=y^=x^=y
x%2==1 ⇒⇒ x&1
x%2==0 ⇒⇒ ~x&1
判斷一個兩個數是否滿足 x>y
x>y ⇒⇒ y-x>>31(注:這里的 x,yx,y 都是 int 型變量,若 x,yx,y 為 long long 型變量則將 31 改為 63)
2.遞歸
注意如果求解子問題失敗,記得要《回溯時還原現場》。遞歸不難,難的是找到遞推關系
分治: 把一個問題划分成若干個規模小的子問題,對這些子問題遞歸求解,然后再回溯時通過它們推導出原問題的解
計算機采用“堆棧結構”實現函數調用;局部變量是用棧存的占用空間太多會暴棧,這時可用全局變量。
全局變量用堆存
