結果
| 問題 | No.162 8020運動 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-02-05 12:54:20 |
| 言語 | Rust (1.93.0 + proconio + num + itertools) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,178 bytes |
| 記録 | |
| コンパイル時間 | 1,800 ms |
| コンパイル使用メモリ | 209,932 KB |
| 実行使用メモリ | 7,848 KB |
| 最終ジャッジ日時 | 2026-02-05 12:54:24 |
| 合計ジャッジ時間 | 3,760 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 26 |
ソースコード
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 f64 / 100.0, p1 as f64 / 100.0, p2 as f64 / 100.0);
// exp value of remaining teeth for consecutive i teeth
let mut dp = (0..=N).into_iter().map(|x| x as f64).collect::<Vec<_>>();
for _ in 0..80 - a {
let mut ndp = vec![0.0; N + 1];
ndp[1] = dp[1] * (1.0 - 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.0 - 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]);
}