結果

問題 No.1172 Add Recursive Sequence
ユーザー akakimidoriakakimidori
提出日時 2021-05-06 02:38:34
言語 Rust
(1.77.0)
結果
TLE  
実行時間 -
コード長 1,495 bytes
コンパイル時間 2,620 ms
コンパイル使用メモリ 153,820 KB
実行使用メモリ 5,504 KB
最終ジャッジ日時 2023-10-11 20:13:18
合計ジャッジ時間 14,253 ms
ジャッジサーバーID
(参考情報)
judge11 / judge14
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,348 KB
testcase_01 AC 1 ms
4,352 KB
testcase_02 AC 1 ms
4,348 KB
testcase_03 AC 1 ms
4,352 KB
testcase_04 AC 1 ms
4,348 KB
testcase_05 AC 1 ms
4,348 KB
testcase_06 AC 1 ms
4,348 KB
testcase_07 AC 1 ms
4,352 KB
testcase_08 AC 2 ms
4,348 KB
testcase_09 AC 3 ms
4,348 KB
testcase_10 AC 25 ms
4,356 KB
testcase_11 AC 23 ms
4,348 KB
testcase_12 AC 87 ms
4,352 KB
testcase_13 AC 78 ms
4,348 KB
testcase_14 AC 1,178 ms
5,504 KB
testcase_15 TLE -
testcase_16 AC 1,253 ms
5,484 KB
testcase_17 TLE -
権限があれば一括ダウンロードができます

ソースコード

diff #

fn read() -> (usize, Vec<u64>, Vec<u64>, Vec<(usize, usize)>) {
    let mut s = String::new();
    use std::io::Read;
    std::io::stdin().read_to_string(&mut s).unwrap();
    let mut it = s.trim().split_whitespace();
    let mut next = || it.next().unwrap().parse::<usize>().unwrap();
    let k = next();
    let n = next();
    let m = next();
    let mut a = vec![0; k];
    for a in a.iter_mut() {
        *a = next() as u64;
    }
    let mut c = vec![0; k];
    for c in c.iter_mut() {
        *c = next() as u64;
    }
    let mut p = vec![(0, 0); m];
    for p in p.iter_mut() {
        p.0 = next();
        p.1 = next();
    }
    (n, a, c, p)
}

#[target_feature(enable = "avx2")]
unsafe fn add(a: &mut [u64], b: &[u64]) {
    for (a, b) in a.iter_mut().zip(b) {
        *a += *b;
    }
}

fn run() {
    let (n, a, c, p) = read();
    const MOD: u64 = 1_000_000_007;
    let mut dp = vec![0; n.max(a.len())];
    for (i, a) in a.iter().enumerate() {
        dp[i] = *a;
    }
    for i in a.len()..n {
        let mut s = 0;
        for (dp, c) in dp[..i].iter().rev().zip(&c) {
            s = (s + *c * *dp) % MOD;
        }
        dp[i] = s;
    }
    let mut ans = vec![0; n];
    for (l, r) in p {
        unsafe {
            add(&mut ans[l..r], &dp);
        }
    }
    use std::io::Write;
    let out = std::io::stdout();
    let mut out = std::io::BufWriter::new(out.lock());
    for a in ans {
        writeln!(out, "{}", a % MOD).ok();
    }
}

fn main() {
    run();
}
0