use std::io::{self, Read};
fn parse_digits(s: &str) -> Vec<u8> {
s.bytes().map(|b| b - b'0').collect()
}
fn main() {
let mut input = String::new();
io::stdin().read_to_string(&mut input).unwrap();
let mut lines = input.lines();
let a = parse_digits(lines.next().unwrap());
let b = parse_digits(lines.next().unwrap());
let c = parse_digits(lines.next().unwrap());
let n = a.len();
let mut offset = 0;
let mut local_counter = 0;
let mut result: u64 = 0;
for i in (0..n).rev() {
let dig_a = a[i];
let dig_b = b[i];
let dig_c = c[i];
if offset == 0 {
if dig_a + dig_b == dig_c {
local_counter += 1;
} else if (dig_a + dig_b) % 10 == dig_c {
offset = 1;
} else {
result += local_counter * (local_counter + 1) / 2;
offset = 0;
local_counter = 0;
}
} else if dig_a + dig_b + offset == dig_c {
local_counter += 1;
offset = 0;
} else if (dig_a + dig_b + offset) % 10 == dig_c {
offset = 1;
} else if dig_a + dig_b == dig_c {
result += local_counter * (local_counter + 1) / 2;
local_counter = 1;
offset = 0;
} else if (dig_a + dig_b) % 10 == dig_c {
result += local_counter * (local_counter + 1) / 2;
local_counter = 0;
offset = 1;
} else {
result += local_counter * (local_counter + 1) / 2;
local_counter = 0;
offset = 0;
}
}
result += local_counter * (local_counter + 1) / 2;
println!("{result}");
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | use std::io::{self, Read}; fn parse_digits(s: &str) -> Vec<u8> { s.bytes().map(|b| b - b'0').collect() } fn main() { let mut input = String::new(); io::stdin().read_to_string(&mut input).unwrap(); let mut lines = input.lines(); let a = parse_digits(lines.next().unwrap()); let b = parse_digits(lines.next().unwrap()); let c = parse_digits(lines.next().unwrap()); let n = a.len(); let mut offset = 0; let mut local_counter = 0; let mut result: u64 = 0; for i in (0..n).rev() { let dig_a = a[i]; let dig_b = b[i]; let dig_c = c[i]; if offset == 0 { if dig_a + dig_b == dig_c { local_counter += 1; } else if (dig_a + dig_b) % 10 == dig_c { offset = 1; } else { result += local_counter * (local_counter + 1) / 2; offset = 0; local_counter = 0; } } else if dig_a + dig_b + offset == dig_c { local_counter += 1; offset = 0; } else if (dig_a + dig_b + offset) % 10 == dig_c { offset = 1; } else if dig_a + dig_b == dig_c { result += local_counter * (local_counter + 1) / 2; local_counter = 1; offset = 0; } else if (dig_a + dig_b) % 10 == dig_c { result += local_counter * (local_counter + 1) / 2; local_counter = 0; offset = 1; } else { result += local_counter * (local_counter + 1) / 2; local_counter = 0; offset = 0; } } result += local_counter * (local_counter + 1) / 2; println!("{result}"); } |
English