11#pragma once
22#include < bitset>
33#include < cassert>
4+ #include < cstddef>
45#include < tuple>
56#include < utility>
67#include < vector>
78
89// Gauss-Jordan elimination of n * m matrix M
910// Complexity: O(nm + nm rank(M) / 64)
1011// Verified: abc276_h (2000 x 8000)
11- template <int Wmax>
12+ template <std:: size_t Wmax>
1213std::vector<std::bitset<Wmax>> f2_gauss_jordan (int W, std::vector<std::bitset<Wmax>> M) {
1314 assert (W <= Wmax);
1415 int H = M.size (), c = 0 ;
@@ -33,7 +34,8 @@ std::vector<std::bitset<Wmax>> f2_gauss_jordan(int W, std::vector<std::bitset<Wm
3334}
3435
3536// 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>
38+ int f2_rank_gauss_jordan (int W, const std::vector<std::bitset<Wmax>> &M) {
3739 assert (W <= Wmax);
3840 for (int h = (int )M.size () - 1 ; h >= 0 ; h--) {
3941 int j = 0 ;
@@ -46,7 +48,7 @@ template <int Wmax> int f2_rank_gauss_jordan(int W, const std::vector<std::bitse
4648// determinant of F2 matrix.
4749// Return 0 if the matrix is singular, otherwise return 1.
4850// Complexity: O(W^3 / 64)
49- template <int Wmax> int f2_determinant (const std::vector<std::bitset<Wmax>> &M) {
51+ template <std:: size_t Wmax> int f2_determinant (const std::vector<std::bitset<Wmax>> &M) {
5052 const int H = M.size ();
5153 if (H > Wmax) return 0 ;
5254
@@ -70,7 +72,7 @@ template <int Wmax> int f2_determinant(const std::vector<std::bitset<Wmax>> &M)
7072 return 1 ; // nonsingular
7173}
7274
73- template <int W1, int W2>
75+ template <std:: size_t W1, std:: size_t W2>
7476std::vector<std::bitset<W2>>
7577f2_matmul (const std::vector<std::bitset<W1>> &A, const std::vector<std::bitset<W2>> &B) {
7678 int H = A.size (), K = B.size ();
@@ -83,7 +85,7 @@ f2_matmul(const std::vector<std::bitset<W1>> &A, const std::vector<std::bitset<W
8385 return C;
8486}
8587
86- template <int Wmax>
88+ template <std:: size_t Wmax>
8789std::vector<std::bitset<Wmax>> f2_matpower (std::vector<std::bitset<Wmax>> X, long long n) {
8890 int D = X.size ();
8991 std::vector<std::bitset<Wmax>> ret (D);
@@ -99,7 +101,7 @@ std::vector<std::bitset<Wmax>> f2_matpower(std::vector<std::bitset<Wmax>> X, lon
99101// - retval: {true, one of the solutions, {freedoms}} (if solution exists)
100102// {false, {}, {}} (otherwise)
101103// Complexity: O(HW + HW rank(A) / 64 + W^2 len(freedoms))
102- template <int Wmax, class Vec >
104+ template <std:: size_t Wmax, class Vec >
103105std::tuple<bool , std::bitset<Wmax>, std::vector<std::bitset<Wmax>>>
104106f2_system_of_linear_equations (std::vector<std::bitset<Wmax>> A, Vec b, int W) {
105107 int H = A.size ();
0 commit comments