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