use std::collections::VecDeque; fn main() { let mut temp = String::new(); std::io::stdin().read_line(&mut temp).ok(); let temp: Vec = temp.trim().split_whitespace().map(|s| s.parse().unwrap()).collect(); let p0 = temp[0] as f64 / 100.; let q = temp[1] as f64 / 100.; let mut result = 0.; let mut deque = VecDeque::new(); result += 1. / 3.; deque.push_back((1. / 3., 0, p0)); for _ in 0..20 { let limit = deque.len(); for _ in 0..limit { let (prob, pattern, prevp) = deque.pop_front().unwrap(); let p = if pattern == 0 { prevp } else if pattern == 1 { prevp - q } else { prevp + q }; let p = p.max(0.).min(1.0); // used + win result += prob * p * 0.5; // unused + win result += prob * (1. - p) / 3.; // used + even deque.push_back((prob * p * 0.5, 1, p)); // unused + even deque.push_back((prob * (1. - p) / 3., 2, p)); } } println!("{}", result); }