use proconio::input; fn main() { input! { num_problems: [usize; 4], num_times: [usize; 4], t: usize, } let mut problems = num_problems .iter() .zip(&num_times) .map(|(&num, &time)| Problem::new(num, time)) .collect::>(); problems.sort_unstable_by_key(|problem| problem.time); let mut sum_solved_problems = 0_usize; let mut rem_time = t; for &problem in &problems { let num_solved_problems = (rem_time / problem.time).min(problem.num); sum_solved_problems += num_solved_problems; rem_time -= problem.time * num_solved_problems; } println!("{}", sum_solved_problems); } #[derive(Debug, Clone, Copy)] struct Problem { num: usize, time: usize, } impl Problem { fn new(num: usize, time: usize) -> Self { Self { num, time } } }