AtCoder Beginner Contest 251 B

https://atcoder.jp/contests/abc251/tasks/abc251_b

use itertools::Itertools;

として手元でコンパイルすると、

error[E0432]: unresolved import `itertools`
 --> ABC251B.rs:4:5
  |
4 | use itertools::Itertools;
  |     ^^^^^^^^^ maybe a missing crate `itertools`?

crateが無いらしいです。一方、AtCoderではこうしたエラーは出ないので、crateを使えるとよいです。

https://qiita.com/Kerzival/items/053ae4674be648f5ada3

CargoでCargo.tomlに

[dependencies]
itertools = "0.10.3"

と書くとItertoolsが使えるようになります。単にダウンロードしてくるだけですね。バージョン番号は適当に検索して。

https://crates.io/crates/itertools

// At Most 3 (Judge ver.)
#![allow(non_snake_case)]

use itertools::Itertools;
use std::collections::HashSet;

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 comb(A: &Vec<i32>, n: usize) -> HashSet<i32> {
    let mut s = HashSet::<i32>::new();
    for v in A.iter().combinations(n) {
        s.insert(v.iter().map(|&e| e).sum());
    }
    return s
}

fn main() {
    let v = read_vec();
    let _N: i32 = v[0];
    let W: i32 = v[1];
    let A = read_vec();
    let mut s: HashSet<i32> = A.iter().map(|e| *e).collect();
    for n in 2..4 {
        let s1 = comb(&A, n);
        s = s.union(&s1).map(|&e| e).collect::<HashSet<i32>>()
    }
    println!("{}", s.iter().filter(|&e| *e <= W).count());
}