AtCoder Beginner Contest 255 A

https://atcoder.jp/contests/abc255/tasks/abc255_a

#![allow(non_snake_case)]

とすれば、AtCoderに必要な大文字を使っても警告が出なくなりますね。

行列はVecのVecで表現します。

    let mut M = Vec::<Vec::<i32>>::new();

Vecのインデックスをi32とすると、

error[E0277]: the type `[std::vec::Vec<i32>]` cannot be indexed by `i32`
  --> src/main.rs:24:17
   |
24 |     println!("{}", A[R-1][C-1])
   |                    ^^^^^^ slice indices are of type `usize` or ranges of `usize`

と怒られました。usizeでなければならないようです。usizeとはなんなのでしょうか。

The pointer-sized unsigned integer type.

https://doc.rust-jp.rs/the-rust-programming-language-ja/1.6/std/primitive.usize.html

なので、環境依存のようです。

#![allow(non_snake_case)]

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 main() {
    let mut v = read_vec();
    let R: usize = v[0];
    let C = v[1];
    let mut A = Vec::<Vec::<i32>>::new();
    for _r in 0..2 {
        let w = read_vec();
        A.push(w);
    }
    println!("{}", A[R-1][C-1])
}