金魚亭日常

読書,ガジェット,競技プログラミング

Rust で競プロ: 標準入力読み込み

まだ何がベストかわからないのだけど,とりあえず現状は,

N M

みたいに整数のペアが空白区切りで与えられた場合,

use std::io;
use std::str::FromStr;

fn main() {
    let stdin = io::stdin();
    let mut buf = String::new();
    stdin.read_line(&mut buf).ok();
    let mut it = buf.split_whitespace().map(|n| usize::from_str(n).unwrap());
    let (n, m) = (it.next().unwrap(), it.next().unwrap());
    println!("N: {}, M: {}", n, m);
}

のように読み込んでいる.

let stdin = io::stdin();
let mut buf = String::new();
stdin.read_line(&mut buf).ok();

で標準入力から1行読み込み,

let mut it = buf.split_whitespace().map(|n| usize::from_str(n).unwrap());

で空白で区切って,usize に変換し,

let (n, m) = (it.next().unwrap(), it.next().unwrap());

で変数に入れている.

usize にしているのは,あとでベクタを宣言するときの要素数に使いたいのでとりあえず.

空白で区切ったあとにイテレータにしているのは,it[0] とかでインデックスを考えるのがめんどくさいので. it.next() でとれた方が楽な気がする.

なので,数値のペアではなく a1 a2 ... an みたいな数列が与えられた場合は,

let v: Vec<i64> = buf.split_whitespace()
    .map(|n| i64::from_str(n).unwrap())
    .collect();

という感じにする.

とりあえず AtCoder の問題をいくつか解いてみた.

AtCoder ABC #067 Rust

AtCoder ABC #061 Rust