Module b
Expand description
ยงABC 399 B - Ranking with Ties
refs: https://atcoder.jp/contests/abc399/tasks/abc399_b
use std::collections::HashMap;
use proconio::input;
fn main() {
input! {
n: usize,
p: [usize; n],
}
let ranks = rank_map(&p);
for pi in p {
println!("{} ", ranks[&pi]);
}
}
fn count_presences(p: &[usize]) -> HashMap<usize, usize> {
p.iter().fold(HashMap::new(), |mut acc, &x| {
*(acc.entry(x).or_default()) += 1;
acc
})
}
fn rank_map(p: &[usize]) -> HashMap<usize, usize> {
let counts = count_presences(p);
let mut rank_map = HashMap::new();
let mut rank = 1;
let mut keys = counts.keys().collect::<Vec<_>>();
keys.sort_by(|a, b| b.cmp(a));
for &k in keys {
rank_map.insert(k, rank);
rank += counts[&k];
}
rank_map
}