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::>(); 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]); }