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,7 @@ 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> int f2_rank_gauss_jordan (int W, const std::vector<std::bitset<Wmax>> &M) {
3738 assert (W <= Wmax);
3839 for (int h = (int )M.size () - 1 ; h >= 0 ; h--) {
3940 int j = 0 ;
@@ -46,7 +47,7 @@ template <int Wmax> int f2_rank_gauss_jordan(int W, const std::vector<std::bitse
4647// determinant of F2 matrix.
4748// Return 0 if the matrix is singular, otherwise return 1.
4849// 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) {
5051 const int H = M.size ();
5152 if (H > Wmax) return 0 ;
5253
@@ -70,7 +71,7 @@ template <int Wmax> int f2_determinant(const std::vector<std::bitset<Wmax>> &M)
7071 return 1 ; // nonsingular
7172}
7273
73- template <int W1, int W2>
74+ template <std:: size_t W1, std:: size_t W2>
7475std::vector<std::bitset<W2>>
7576f2_matmul (const std::vector<std::bitset<W1>> &A, const std::vector<std::bitset<W2>> &B) {
7677 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
8384 return C;
8485}
8586
86- template <int Wmax>
87+ template <std:: size_t Wmax>
8788std::vector<std::bitset<Wmax>> f2_matpower (std::vector<std::bitset<Wmax>> X, long long n) {
8889 int D = X.size ();
8990 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
99100// - retval: {true, one of the solutions, {freedoms}} (if solution exists)
100101// {false, {}, {}} (otherwise)
101102// 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 >
103104std::tuple<bool , std::bitset<Wmax>, std::vector<std::bitset<Wmax>>>
104105f2_system_of_linear_equations (std::vector<std::bitset<Wmax>> A, Vec b, int W) {
105106 int H = A.size ();
0 commit comments