結果

問題 No.76 回数の期待値で練習
コンテスト
ユーザー urectanc
提出日時 2026-05-04 16:35:40
言語 Rust
(1.94.0 + proconio + num + itertools)
コンパイル:
/usr/bin/rustc_custom
実行:
./target/release/main
結果
AC  
実行時間 14 ms / 5,000 ms
コード長 1,262 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 796 ms
コンパイル使用メモリ 195,680 KB
実行使用メモリ 9,984 KB
最終ジャッジ日時 2026-05-04 16:35:42
合計ジャッジ時間 1,789 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 2
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

use itertools::Itertools;
use proconio::input;

const N: usize = 1_000_000;

fn main() {
    input! {
        t: usize,
        n: [usize; t],
    }

    let p = [0, 1, 2, 3, 1, 3, 2];
    let p = p.iter().map(|&p| p as f64 / 12.0).collect_vec();

    let mut ans = vec![0.0; N + 1];
    for i in 1..=N {
        ans[i] = (1..=6).fold(1.0, |acc, d| acc + ans[i.saturating_sub(d)] * p[d]);
    }

    for &n in &n {
        println!("{}", ans[n]);
    }
}

#[allow(unused)]
fn calc() {
    let e = [
        0.0,
        1.0000000000000000,
        1.0833333333333333,
        1.2569444444444444,
        1.5353009259259260,
        1.6915991512345676,
        2.0513639724794235,
    ];

    let mut p = vec![0.0; 7];
    for i in 1..6 {
        p[i] = e[i + 1] - 1.0;
        for j in 1..i {
            p[i] -= p[j] * e[i + 1 - j];
        }
    }
    p[6] = 1.0 - p[1..6].iter().sum::<f64>();

    dbg!(p);
}

// e0 = 0
// e1 = e0 + 1
// e2 = e0 * (1 - p1) + e1 * p1 + 1
// e3 = e0 * ... + e1 * p2 + e2 * p1 + 1
// e4 = e0 * ... + e1 * p3 + e2 * p2 + e3 * p1 + 1
//
// p = [
//     0.0,
//     0.08333333333333326,
//     0.16666666666666674,
//     0.2500000000000001,
//     0.08333333333333298,
//     0.24999999999999983,
//     0.16666666666666718,
// ]
0