use proconio::{fastout, input, marker::Bytes}; #[fastout] fn main() { input! { n: usize, a: u64, s: Bytes, } println!("{}", solve(n, a, s)); } fn solve(_n: usize, mut a: u64, s: Vec) -> u64 { let mut margin: u64 = 0; let mut do_cycle = |a: &mut _| -> Option { for (i, s) in s.iter().enumerate() { match *s { b'0' => margin += 1, b'1' => { if margin > 0 { margin -= 1; *a -= 1; if *a == 0 { return Some((i + 1) as u64); } } } _ => (), } } None }; if let Some(result) = do_cycle(&mut a) { return result; } let a_origin = a; if let Some(result) = do_cycle(&mut a) { return s.len() as u64 + result; } let ans_about = s.len() as u64 * (2 + (a - 1) / (a_origin - a)); a = (a - 1) % (a_origin - a) + 1; ans_about + do_cycle(&mut a).unwrap() }