https://atcoder.jp/contests/abc247/tasks/abc247_b
StringをHashMapのキーにするときには、to_string()をつけるとよいようです。
それから、
match m.get(&k.to_string()) { Some(n) => m.insert(k.to_string(), n + 1), None => m.insert(k.to_string(), 1) };
だとwarningがでてしまいますね。
こう書き換えます。
match m.get(&k.to_string()) { Some(n) => { let n1 = n + 1; m.insert(k.to_string(), n1) } None => m.insert(k.to_string(), 1) };
// Unique Nicknames #![allow(non_snake_case)] use std::collections::HashMap; 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() } fn read_vec<T: std::str::FromStr>() -> Vec<T> { read::<String>().split_whitespace() .map(|e| e.parse().ok().unwrap()).collect() } fn count(k: &String, m: &mut HashMap<String,i32>) { match m.get(&k.to_string()) { Some(n) => { let n1 = n + 1; m.insert(k.to_string(), n1) } None => m.insert(k.to_string(), 1) }; } fn is_all_unique_nickname(names: &Vec<(String,String)>) -> bool { let mut m = HashMap::<String,i32>::new(); for (s, t) in names.iter() { count(&s, &mut m); count(&t, &mut m); } for (s, t) in names.iter() { if s == t { if m[s] != 2 { return false } } else { if m[s] != 1 && m[t] != 1 { return false } } } return true } fn main() { let N: usize = read(); let mut names = Vec::<(String,String)>::new(); for _ in 0..N { let v: Vec<String> = read_vec(); names.push((v[0].to_string(), v[1].to_string())) } let b = is_all_unique_nickname(&names); println!("{}", if b { "Yes" } else { "No" }); }