Open4
RustでAtCoderを解くにあたり詰まった所集
入力で受け取ったサイズの配列を作りたい
proconio経由の入力は定数ではないので、その値を使用した配列を作ろうとすると怒られる。
input! {
m: usize,
}
let vec = [0; m]; // これは駄目
空のベクタを作ってから、resize
関数を呼んであげると、それっぽく回避できる。
input! {
m: usize,
}
let array = Vec::new();
array.resize(m, 0) // 第2引数は初期値
追記
何か勘違いしていたが、普通にvec!
マクロを使えば良かった。
input! {
m: usize,
}
let vec = vec![0; m];
Vecを2つのキーでソート
上記の記事を参照。コードのみ抜粋すると以下。
vec.sort_by(
|a, b| a.0.cmp(&b.0).then(a.1.cmp(&b.1))
);
昇順と降順を変えたい場合は、対応するaとbの位置を逆にする。
初期値が定まっているHashMapを作る
use std::collections::HashMap;
use std::iter::FromIterator;
let map:HashMap<&str, i32> = HashMap::from_iter(vec![
("Sunny", 1),
("Cloudy", 2),
("Rainy", 3)
]);
最大公約数、最小公倍数を求める
numクレートの読み込みが必要
use num::integer;
// gcd 最大公約数
assert_eq!(integer::gcd(12, 18), 6);
// lcm 最小公倍数
assert_eq!(integer::lcm(12, 18), 36);