結果

問題 No.162 8020運動
コンテスト
ユーザー cologne
提出日時 2026-02-05 12:55:31
言語 Rust
(1.93.0 + proconio + num + itertools)
結果
AC  
実行時間 2 ms / 5,000 ms
コード長 1,193 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,395 ms
コンパイル使用メモリ 208,452 KB
実行使用メモリ 7,976 KB
最終ジャッジ日時 2026-02-05 12:55:58
合計ジャッジ時間 3,564 ms
ジャッジサーバーID
(参考情報)
judge1 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 26
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

use proconio::{fastout, input};

const N: usize = 14;

#[fastout]
fn main() {
    input! {
        a: i32,
        p0: i32,
        p1: i32,
        p2: i32,
    }
    let (p0, p1, p2) = (p0 as f32 / 100.0f32, p1 as f32 / 100.0f32, p2 as f32 / 100.0f32);

    // exp value of remaining teeth for consecutive i teeth
    let mut dp = (0..=N).into_iter().map(|x| x as f32).collect::<Vec<_>>();

    for _ in 0..80 - a {
        let mut ndp = vec![0.0; N + 1];
        ndp[1] = dp[1] * (1.0f32 - p0);

        for ln in 2..=N {
            let mut ans = 0.0;
            let mut prob = vec![1.0];
            for j in 0..ln {
                prob.push(0.0);
                let p = if j == 0 || j == ln - 1 { p1 } else { p2 };
                let mut p0 = 0.0;
                for k in (0..=j).rev() {
                    ans += p * dp[k] * prob[k];
                    prob[k + 1] = (1.0f32 - p) * prob[k];
                    p0 += p * prob[k];
                }
                prob[0] = p0;
            }

            for j in 0..=ln {
                ans += dp[j] * prob[j];
            }

            ndp[ln] = ans;
        }

        dp = ndp;
    }

    println!("{:.9}", 2.0 * dp[N]);
}
0