Skip to main content

library_checker/linear_algebra/
matrix_product.rs

1use competitive::prelude::*;
2use competitive::{algebra::AddMulOperation, math::Matrix, num::mint_basic::MInt998244353 as M};
3
4#[verify::library_checker("matrix_product")]
5pub fn matrix_product(reader: impl Read, writer: impl Write) {
6    prepare_io!(reader, writer);
7    sc!(n, m, k, a: [[M; m]; n], b: [[M; k]; m]);
8    let a = Matrix::<AddMulOperation<_>>::from_vec(a);
9    let b = Matrix::<AddMulOperation<_>>::from_vec(b);
10    let c = a * b;
11    pp!(@it2d c.data);
12}
13
14#[verify::library_checker("matrix_product")]
15pub fn matrix_product_strassen(reader: impl Read, writer: impl Write) {
16    prepare_io!(reader, writer);
17    sc!(n, m, k, a: [[M; m]; n], b: [[M; k]; m]);
18    let a = Matrix::<AddMulOperation<_>>::from_vec(a);
19    let b = Matrix::<AddMulOperation<_>>::from_vec(b);
20    let c = a.mul_strassen(&b);
21    pp!(@it2d c.data);
22}