Skip to main content

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}