Rustの勉強に良いかなとAtcoder Beginners Selectionを少しづつ進めていましたが、ようやく全て解いたので学びをまとめていこうかと思います
RustでAtcoderを始めるときのテンプレート
私はRustでAtcoderの問題を解くときは以下のテンプレートを利用しています(といってもWebか何かで見たものをそのまま使っています)
#[allow(unused_imports)]
use itertools::{iproduct, Itertools};
#[allow(unused_imports)]
use num_traits::pow;
#[allow(unused_imports)]
use proconio::{
fastout, input,
marker::{Chars, Usize1},
};
#[allow(unused_imports)]
use std::cmp::{max, min};
#[allow(unused_imports)]
use std::collections::{HashMap, HashSet, VecDeque};
#[allow(unused_imports)]
use std::iter::FromIterator;
fn main() {
input!{
h: usize, w: usize,
s: [Chars; h],
mut plan: [(usize, usize, usize); h]
}
}
多分他にもこれ使ったほうが良いよみたいなライブラリもあると思いますので、そのときはコメントいただけると嬉しいです
解いていて書き方がわからなかったところ
input!の使い方
proconioというのがRustでの標準入力を簡単にしてくれるマクロです
cargo.toml
に以下のように追記します
[dependencies]
proconio = "0.4.3"
以下のような標準入力を
3
abc
1 2 3
input!
を使うと以下のような形で受け取ることができます
use proconio::input;
fn main() {
input! {
n: i32,
s: String,
d: [usize; n],
}
println!("{}, {:?}", s, d); // abc, [1, 2, 3]
}
ソートや反転などの基本的なメソッド
ソートや反転などの処理はAtcoderではよく出てくると思いますが、解いているときに書き方がわからなかったのでAtcoder Beginners Selectionをやっておいてよかったです
sort()
やreverse()
は元の配列が変更されるため、mut
が必要になります。この辺りはPythonなどにはないところで初心者が気をつけないといけないところかなと思いました
fn main() {
let mut a = vec![3, 4, 1, 2];
a.sort();
a.reverse();
println!("a: {:?}", a); // a: [4, 3, 2, 1]
}
配列をユニークにする方法
これは別で記事を書きましたのでこちらを見てみてください
最後に
まだまだRustを勉強中なので間違いなどはコメントいただけると嬉しいです
そのうちAtcoderのコンテストにRustで挑めるようになりたい
コメント