競プロ典型90問をRustで解いていこう(適切な前処理)1日目

猫_1646401150.webp
目次

はじめに

競プロ典型90問をRustで解いていこう(準備)0日目

スターオーシャン3のバトルコレクションのように、気長にやっていこうと思っています。 手始めに最低難易度として紹介されていた004 - Cross Sum(★2)を解いていこうと思います。

Rustの勉強も兼ねているので、しばらくはRustで解いていきます。

004 - Cross Sum(★2)

グリット上の各交点に数字が並んでおり、各点の縦と横の値の合計を計算する問題です。

入力例 1 1 1 1 1 1 1 1 1

出力例 5 5 5 5 5 5 5 5 5

方針

適切な前処理ということで、各マスで縦と横の値を都度都度取得して合計するのもやり方としてはあります。 ただ、縦方向、横方向の合計はそれぞれ各行と列で一意に決まるため事前に計算しておいてリストをもたせるのが良いかと思います。

Rustでの回答例

空のVector配列を用意して、各行列の合計を算出しておき、各座標で縦と横の合計を足して、重複している現座標の値を引いたら求めていた結果が出ます。

use proconio::input;

fn main() {
    input! {
        h: usize,//行
        w: usize,//列
        mut a: [[i32; w];h]
    }

    let mut row = vec![0; h];
    let mut col = vec![0; w];

    for i in 0..h {
        for j in 0..w {
            row[i] += a[i][j];
            col[j] += a[i][j];
        }
    }

    for i in 0..h {
        for j in 0..w {
            print!("{} ", row[i] + col[j] - a[i][j]);
        }
        println!();
    }
}

まとめ

まずは一日目簡単な問題から解けました。 良かった…。

Related Post

> 競プロ典型90問をRustで解いていこう(適切な前処理)1日目
競プロ典型90問をRustで解いていこう(準備)0日目
> 競プロ典型90問をRustで解いていこう(適切な前処理)1日目
【AtCoder Beginners Selection】全10問をRustで解いた。
> 競プロ典型90問をRustで解いていこう(適切な前処理)1日目
Rustの基礎文法大体覚えたので競プロで理解を確かめていこう(中盤)
> 競プロ典型90問をRustで解いていこう(適切な前処理)1日目
【AtCoder】Rustを勉強するため、AtCoder Beginners Selectionを解いていく(前半戦)
> 競プロ典型90問をRustで解いていこう(適切な前処理)1日目
RustからSQLiteにデータを詰め込み、取り出すぞい
> 競プロ典型90問をRustで解いていこう(適切な前処理)1日目
RustでHTMLテンプレートを使ったWebアプリを作ろう

おすすめの商品

>