use itertools::Itertools; use proconio::input; fn main() { input! { mut r: usize, p: usize, q: usize, a: usize, b: usize, c: usize, d: usize, } let mut ans = 0; let mut abc = vec![a, b, c]; abc.sort(); let min_abc = abc[0]; let can_p = r / p; if min_abc >= can_p { println!("{}", ans + can_p); return; } ans += min_abc; r -= p * min_abc; abc = abc .iter() .map(|&v| v - min_abc) .filter(|&v| v > 0) .collect_vec(); abc.sort(); if abc.len() == 2 { let min_abc = abc[0]; let can_p = r / (p + q); if min_abc >= can_p { println!("{}", ans + can_p); return; } ans += min_abc; r -= (p + q) * min_abc; abc = abc .iter() .map(|&v| v - min_abc) .filter(|&v| v > 0) .collect_vec(); abc.sort(); } if abc.len() == 1 { let min_abc = abc[0]; let can_p = r / (p + q + q); if min_abc >= can_p { println!("{}", ans + can_p); return; } ans += min_abc; r -= (p + q + q) * min_abc; abc = abc .iter() .map(|&v| v - min_abc) .filter(|&v| v > 0) .collect_vec(); abc.sort(); } let can_p = r / (p + q + q + q); println!("{}", ans + can_p); }