バイトの競プロメモ

主に競技プログラミング

メモ a+bのkビット目が立っているかの判定

 https://drken1215.hatenablog.com/entry/2020/03/08/202600

{
in(N);
na(A, N);
int res = 0;
rep(k, 30) {
vi B = A;
rep(i, N) {
B[i] %= bit(k + 1);
}
sort(B);
//kbit目が立つような相手を数える
int cou = 0;
rep(i, N) {
auto cou_range = [&](int lv, int rv) {
lv -= B[i];
rv -= B[i];
int lp = lowerIndex(B, lv);
int rp = lowerIndex(B, rv);
chmi(rp, i);
return u(rp - lp);
};
cou += cou_range(bit(k), bit(k + 1));
cou += cou_range(bit(k) + bit(k + 1), bit(k + 2));
}
if (cou % 2)res += bit(k);
}
out(res);
}