use proconio::{fastout, input}; #[fastout] fn main() { input! { n: usize, m: u32, plants: [(u32, u32); n], } println!("{}", output(solve(m, plants))); } fn prepare(m: u32, plants: Vec<(u32, u32)>) -> Vec { plants.into_iter().map(|(a, b)| (m - a) / b).collect() } fn solve(m: u32, plants: Vec<(u32, u32)>) -> u32 { let mut deadline_of = prepare(m, plants); deadline_of.sort_unstable(); let deadline_of = deadline_of; let mut l = 0; let mut r = deadline_of.len(); while l + 1 < r { let c = l.midpoint(r); if deadline_of .chunks(c) .enumerate() .all(|(i, d)| d[0] >= i as u32) { r = c; } else { l = c; } } r as u32 } fn output(ans: u32) -> u32 { ans }