Open Astral-23 opened 4 months ago
サイズでかい版 N <= 3000ぐらい? 1回の追加に(k ^ 2 / 64)
template <int k> struct bitbase {
using BS = bitset<k>;
int sz;
vec<BS> d;
bitbase() : sz(0), d(k, 0) {}
BS tomin(BS &x) {
rrep(i, 0, k) if (x[i]) x ^= d[i];
return x;
}
void add(BS x) {
tomin(x);
rrep(i, 0, k) if (x[i]) {
rep(j, 0, k) {
if (d[j][i]) d[j] ^= x;
}
d[i] = x;
sz++;
return;
}
}
int rank() { return sz; }
bool can(BS x) {
rrep(i, 0, k) if (x[i]) x ^= d[i];
return x == 0;
}
};
const int K = 5000;
using BS = bitset<K>;
コードは書いた atcoderで試した atcoderはauto_verifyで(この環境では)使えない
https://atcoder.jp/contests/code-thanks-festival-2017-open/submissions/54047105