Skip to content

Commit 9e2a6e4

Browse files
committed
fix test now
1 parent edff1eb commit 9e2a6e4

File tree

3 files changed

+29
-40
lines changed

3 files changed

+29
-40
lines changed

library/math/matrix_related/walk.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
bitset<B> walk(const bitset<B>& k) {
1+
bitset<B> walk(bitset<B>& k) {
22
bitset<B> res;
33
for (int i = B, j = npivot; i--;)
44
if (basis[i][i] && res[i] ^ k[--j]) res ^= basis[i];

library/math/matrix_related/xor_basis_ordered.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ template<int B> struct xor_basis {
1515
int shrink(bitset<B>& v) {
1616
for (int i = B; i--;)
1717
if (v[i]) {
18-
if (basis[i][i]) return i;
18+
if (!basis[i][i]) return i;
1919
v ^= basis[i];
2020
}
2121
return -1;

tests/library_checker_aizu_tests/math/xor_basis_intersection.test.cpp

Lines changed: 27 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,16 @@ void check_condition_unordered(const basis& b) {
1414
or_bits |= b.b[i];
1515
}
1616
}
17-
void check_condition_ordered(
18-
const basis_ordered<ll>& basis3,
19-
const basis_ordered<bitset<lg>>& basis4) {
20-
ll or_bits3 = 0;
21-
bitset<lg> or_bits4 = 0;
22-
for (int i = 0; i < lg; i++) {
23-
assert(basis3.b[i] == 0 ||
24-
bit_floor(1ULL * basis3.b[i]) == (1ULL << i));
25-
assert(
26-
(bit_floor(uint64_t(basis3.b[i])) & or_bits3) == 0);
27-
assert((bit_floor(uint64_t(basis4.b[i].to_ullong())) &
28-
or_bits4.to_ullong()) == 0);
29-
or_bits3 |= basis3.b[i];
30-
or_bits4 |= basis4.b[i];
17+
const int B = 30;
18+
void check_condition_ordered(const xor_basis<B>& basis2) {
19+
bitset<B> or_bits2;
20+
for (int i = 0; i < B; i++) {
21+
assert(basis2.basis[i].none() ||
22+
bit_floor(basis2.basis[i].to_ulong()) ==
23+
(1ULL << i));
24+
assert((bit_floor(basis2.basis[i].to_ulong()) &
25+
or_bits2.to_ulong()) == 0);
26+
or_bits2 |= basis2.basis[i];
3127
}
3228
}
3329
int main() {
@@ -38,43 +34,36 @@ int main() {
3834
int n;
3935
cin >> n;
4036
basis basis1;
41-
basis_ordered<int> basis2; // to check that it compiles
42-
assert(
43-
sz(basis2.b) == lg); // remove unused var warning
44-
basis_ordered<ll> basis3;
45-
basis_ordered<bitset<lg>> basis4;
37+
xor_basis<B> basis2;
38+
for (int i = 0; i < B; i++)
39+
assert(basis2.basis[i].none());
4640
for (int i = 0; i < n; i++) {
4741
int val;
4842
cin >> val;
43+
bitset<B> v = val;
4944
assert(basis1.insert(val));
5045
assert(!basis1.insert(val));
51-
assert(basis3.insert(val));
52-
assert(!basis3.insert(val));
53-
assert(basis4.insert(val));
54-
assert(!basis4.insert(val));
46+
assert(basis2.insert(v));
47+
assert(!basis2.insert(v));
5548
}
5649
check_condition_unordered(basis1);
57-
check_condition_ordered(basis3, basis4);
50+
check_condition_ordered(basis2);
5851
int m;
5952
cin >> m;
60-
basis basis5;
61-
basis_ordered<int> basis6;
62-
assert(sz(basis6.b) == lg);
63-
basis_ordered<ll> basis7;
64-
basis_ordered<bitset<lg>> basis8;
53+
basis basis3;
54+
xor_basis<B> basis4;
6555
for (int j = 0; j < m; j++) {
6656
int val;
6757
cin >> val;
68-
assert(basis5.insert(val));
69-
assert(!basis5.insert(val));
70-
assert(basis7.insert(val));
71-
assert(!basis7.insert(val));
72-
assert(basis8.insert(val));
73-
assert(!basis8.insert(val));
58+
bitset<B> v = val;
59+
assert(basis3.insert(val));
60+
assert(!basis3.insert(val));
61+
assert(basis4.insert(v));
62+
assert(!basis4.insert(v));
7463
}
75-
check_condition_unordered(basis5);
76-
check_condition_ordered(basis7, basis8);
77-
basis inter = intersection(basis1, basis5);
64+
check_condition_unordered(basis3);
65+
check_condition_ordered(basis4);
66+
basis inter = intersection(basis1, basis3);
7867
check_condition_unordered(inter);
7968
cout << sz(inter.b) << " ";
8069
for (int val : inter.b) cout << val << " ";

0 commit comments

Comments
 (0)