library_checker/linear_algebra/matrix_rank.rs
1use competitive::prelude::*;
2use competitive::{algebra::AddMulOperation, math::Matrix, num::mint_basic::MInt998244353 as M};
3
4#[verify::library_checker("matrix_rank")]
5pub fn matrix_rank(reader: impl Read, writer: impl Write) {
6 prepare_io!(reader, writer);
7 sc!(n, m);
8 let mut a = if n <= m {
9 sc!(a: [[M; m]; n]);
10 Matrix::<AddMulOperation<_>>::from_vec(a)
11 } else {
12 let mut a = Matrix::<AddMulOperation<_>>::zeros((m, n));
13 for j in 0..n {
14 for row in &mut a.data {
15 sc!(x: M);
16 row[j] = x;
17 }
18 }
19 a
20 };
21 let rank = a.rank();
22 pp!(rank);
23}