https://atcoder.jp/contests/abc295/tasks/abc295_d
左から見ていって、各数字の出現回数の偶奇が同じなら、その区間は各数字が偶数回出現していることになります。
// Three Days Ago #![allow(non_snake_case)] //////////////////// library //////////////////// fn read<T: std::str::FromStr>() -> T { let mut line = String::new(); std::io::stdin().read_line(&mut line).ok(); line.trim().parse().ok().unwrap() } //////////////////// process //////////////////// fn read_input() -> Vec<i32> { let S: String = read(); S.chars().map(|c| (c as i32) - 48).collect::<Vec<i32>>() } fn f(ds: Vec<i32>) -> u64 { let mut a: Vec<u64> = (0..1024).map(|_| 0).collect(); let mut flags: usize = 0; a[flags] += 1; for d in ds.iter() { flags ^= (1 << d) as usize; a[flags] += 1 } a.iter().map(|n| n * (n - 1) / 2).sum() } fn main() { let ds = read_input(); println!("{}", f(ds)) }