https://atcoder.jp/contests/abc260/tasks/abc260_b
let mut s = BTreeSet::<usize>::new(); set_from_vec(&s, &ids1, X);
これだと怒られます。
40 | set_from_vec(&s, &ids1, X); | ^^ types differ in mutability
これは、
set_from_vec(&mut s, &ids1, X);
としないといけません。
// Better Students Are Needed! #![allow(non_snake_case)] use std::collections::BTreeSet; 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 set_from_vec(s: &mut BTreeSet<usize>, v: &Vec<usize>, n: usize) { let N = s.len(); for &e in v.iter() { if s.len() == N + n { break; } s.insert(e); } } fn main() { let v = read_vec(); let N: usize = v[0]; let X = v[1]; let Y = v[2]; let Z = v[3]; let A: Vec<i32> = read_vec(); let B: Vec<i32> = read_vec(); let mut s = BTreeSet::<usize>::new(); let mut ids1 = (0usize..N).collect::<Vec<usize>>(); ids1.sort_by(|&a, &b| A[b].cmp(&A[a])); set_from_vec(&mut s, &ids1, X); let mut ids2 = (0..N).collect::<Vec<usize>>(); ids2.sort_by(|&a, &b| B[b].cmp(&B[a])); set_from_vec(&mut s, &ids2, Y); let mut ids3 = (0..N).collect::<Vec<usize>>(); ids3.sort_by(|&a, &b| (A[b] + B[b]).cmp(&(A[a] + B[a]))); set_from_vec(&mut s, &ids3, Z); for i in s.iter() { println!("{}", i + 1) } }