1
1
#pragma once
2
2
#include < bitset>
3
3
#include < cassert>
4
+ #include < cstddef>
4
5
#include < tuple>
5
6
#include < utility>
6
7
#include < vector>
7
8
8
9
// Gauss-Jordan elimination of n * m matrix M
9
10
// Complexity: O(nm + nm rank(M) / 64)
10
11
// Verified: abc276_h (2000 x 8000)
11
- template <int Wmax>
12
+ template <std:: size_t Wmax>
12
13
std::vector<std::bitset<Wmax>> f2_gauss_jordan (int W, std::vector<std::bitset<Wmax>> M) {
13
14
assert (W <= Wmax);
14
15
int H = M.size (), c = 0 ;
@@ -33,7 +34,7 @@ std::vector<std::bitset<Wmax>> f2_gauss_jordan(int W, std::vector<std::bitset<Wm
33
34
}
34
35
35
36
// Rank of Gauss-Jordan eliminated matrix
36
- template <int Wmax> int f2_rank_gauss_jordan (int W, const std::vector<std::bitset<Wmax>> &M) {
37
+ template <std:: size_t Wmax> int f2_rank_gauss_jordan (int W, const std::vector<std::bitset<Wmax>> &M) {
37
38
assert (W <= Wmax);
38
39
for (int h = (int )M.size () - 1 ; h >= 0 ; h--) {
39
40
int j = 0 ;
@@ -46,7 +47,7 @@ template <int Wmax> int f2_rank_gauss_jordan(int W, const std::vector<std::bitse
46
47
// determinant of F2 matrix.
47
48
// Return 0 if the matrix is singular, otherwise return 1.
48
49
// Complexity: O(W^3 / 64)
49
- template <int Wmax> int f2_determinant (const std::vector<std::bitset<Wmax>> &M) {
50
+ template <std:: size_t Wmax> int f2_determinant (const std::vector<std::bitset<Wmax>> &M) {
50
51
const int H = M.size ();
51
52
if (H > Wmax) return 0 ;
52
53
@@ -70,7 +71,7 @@ template <int Wmax> int f2_determinant(const std::vector<std::bitset<Wmax>> &M)
70
71
return 1 ; // nonsingular
71
72
}
72
73
73
- template <int W1, int W2>
74
+ template <std:: size_t W1, std:: size_t W2>
74
75
std::vector<std::bitset<W2>>
75
76
f2_matmul (const std::vector<std::bitset<W1>> &A, const std::vector<std::bitset<W2>> &B) {
76
77
int H = A.size (), K = B.size ();
@@ -83,7 +84,7 @@ f2_matmul(const std::vector<std::bitset<W1>> &A, const std::vector<std::bitset<W
83
84
return C;
84
85
}
85
86
86
- template <int Wmax>
87
+ template <std:: size_t Wmax>
87
88
std::vector<std::bitset<Wmax>> f2_matpower (std::vector<std::bitset<Wmax>> X, long long n) {
88
89
int D = X.size ();
89
90
std::vector<std::bitset<Wmax>> ret (D);
@@ -99,7 +100,7 @@ std::vector<std::bitset<Wmax>> f2_matpower(std::vector<std::bitset<Wmax>> X, lon
99
100
// - retval: {true, one of the solutions, {freedoms}} (if solution exists)
100
101
// {false, {}, {}} (otherwise)
101
102
// Complexity: O(HW + HW rank(A) / 64 + W^2 len(freedoms))
102
- template <int Wmax, class Vec >
103
+ template <std:: size_t Wmax, class Vec >
103
104
std::tuple<bool , std::bitset<Wmax>, std::vector<std::bitset<Wmax>>>
104
105
f2_system_of_linear_equations (std::vector<std::bitset<Wmax>> A, Vec b, int W) {
105
106
int H = A.size ();
0 commit comments