https://atcoder.jp/contests/abc375/tasks/abc375_d
文字ごとにポジションを配列にして、それをxと書くと、その配列のサイズをNとして、
とすると、
となって、で計算できます。
// ABA #![allow(non_snake_case)] use std::collections::HashMap; //////////////////// 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 classify(S: &String) -> HashMap<char, Vec<usize>> { let mut cl: HashMap<char, Vec<usize>> = HashMap::new(); for (p, c) in S.chars().enumerate() { let e = cl.entry(c).or_insert(vec![]); (*e).push(p) } return cl } fn F_each(v: Vec<usize>) -> usize { let N = v.len(); let mut s: usize = 0; let mut a: usize = 0; for j in 1..N { a += v[j-1]; s += j * (v[j] - 1) - a } s } fn F(S: String) -> usize { let cl = classify(&S); cl.into_iter().map(|(_, v)| F_each(v)).sum::<usize>() } fn main() { let S: String = read(); println!("{}", F(S)) }