跳躍二分搜

快速冪

1
2
3
4
5
6
7
8
int f(int x, int y) {
    int ret = 1;
    for (; y; y >>= 1) {
        if (y&1) ret *= x;
        x *= x;
    }
    return ret;
}
1
2
3
4
5
6
int f(int x, int y) {
    if (!y) return 1;
    if (y&1) return f(x, y-1) * x;
    int k = f(x, y/2);
    return k*k;
}

互補團隊

1
2
3
4
m 為總共幾個元素
int k = (1 << m) - 1;
for (auto &c : string) now |= (1 << (c-'A')); 計算現在物件有幾項元素
另一項互補物件即為 now^k