提出 #42829746


ソースコード 拡げる

use proconio::input;

fn mul(a: &[Vec<usize>], b: &[Vec<usize>], modp: usize) -> Vec<Vec<usize>> {
    let n = a.len();
    let mut c = vec![vec![0_usize; n]; n];
    for i in 0..n {
        for j in 0..n {
            for k in 0..n {
                c[i][j] += a[i][k] * b[k][j];
                c[i][j] %= modp;
            }
        }
    }
    c
}

fn main() {
    input! {
        n: usize,
        mut k: usize,
        m: [[usize; n]; n],
    }

    let modp = 1_000_000_007_usize;

    let mut r = {
        let mut unit = vec![vec![0_usize; n]; n];
        for i in 0..n {
            unit[i][i] = 1_usize;
        }
        unit
    };
    let mut t = m;
    while k != 0 {
        if (k & 1) == 1 {
            r = mul(&r, &t, modp);
        }
        t = mul(&t, &t, modp);
        k >>= 1;
    }

    let mut ans = 0_usize;
    for i in 0..n {
        ans += r[i].iter().sum::<usize>();
        ans %= modp;
    }
    println!("{}", ans);
}

提出情報

提出日時
問題 R - Walk
ユーザ bouzuya
言語 Rust (1.42.0)
得点 100
コード長 954 Byte
結果 AC
実行時間 79 ms
メモリ 2208 KiB

ジャッジ結果

セット名 All
得点 / 配点 100 / 100
結果
AC × 23
セット名 テストケース
All 0_00, 0_01, 0_02, 0_03, 0_04, 1_00, 1_01, 1_02, 1_03, 1_04, 1_05, 1_06, 1_07, 1_08, 1_09, 1_10, 1_11, 1_12, 1_13, 1_14, 1_15, 1_16, 1_17
ケース名 結果 実行時間 メモリ
0_00 AC 7 ms 2148 KiB
0_01 AC 2 ms 2044 KiB
0_02 AC 2 ms 2068 KiB
0_03 AC 2 ms 2056 KiB
0_04 AC 3 ms 1884 KiB
1_00 AC 1 ms 2072 KiB
1_01 AC 2 ms 2096 KiB
1_02 AC 6 ms 2080 KiB
1_03 AC 62 ms 2200 KiB
1_04 AC 4 ms 2032 KiB
1_05 AC 61 ms 2152 KiB
1_06 AC 4 ms 2208 KiB
1_07 AC 79 ms 2020 KiB
1_08 AC 44 ms 2156 KiB
1_09 AC 61 ms 2064 KiB
1_10 AC 61 ms 2084 KiB
1_11 AC 54 ms 2200 KiB
1_12 AC 55 ms 2104 KiB
1_13 AC 65 ms 2156 KiB
1_14 AC 62 ms 2016 KiB
1_15 AC 60 ms 2092 KiB
1_16 AC 62 ms 2104 KiB
1_17 AC 60 ms 2120 KiB