?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
120345231 |
Practice: memoryallocator |
1066E - 14 | Rust | Wrong answer on test 3 | 15 ms | 544 KB | 2021-06-23 10:15:42 | 2021-06-23 10:15:42 |
use std::*; use io::{stdin, Read}; type IntType = i128; const MOD: IntType = 998_244_353; fn add(x: IntType, y: IntType) -> IntType { let mut x = x.wrapping_add(y); while x < 0 { x += MOD; } while x >= MOD { x -= MOD; } x } fn main() { let mut n_and_m = String::new(); stdin().read_line(&mut n_and_m); let mut n_and_m: Vec<&str> = n_and_m.trim().split(" ").collect(); let m = n_and_m.pop().unwrap().parse::<usize>().unwrap(); let n = n_and_m.pop().unwrap().parse::<usize>().unwrap(); drop(n_and_m); let mut a = vec![b'\0'; n]; stdin().read(&mut a); stdin().read_line(&mut String::new()); a.reverse(); let mut b = vec![b'\0'; m]; stdin().read(&mut b); b.reverse(); let mut pw: IntType = 1; let mut res: IntType = 0; let mut ans: IntType = 0; for (i, b) in b.into_iter().enumerate() { if let Some(b'1') = a.get(i) { res = add(res, pw); } if b == b'1' { ans = add(ans, res); } pw = add(pw, pw); } println!("{}", ans.wrapping_rem_euclid(MOD)) }
?
?
?
?