Atcoder ABS PracticeA Welcome to AtCoder

こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 PracticeA - Welcome to AtCoder 実装 以下のように実装しました。 今回はRustを使います。 (前回の記事であまりにもGoが遅かったので。。。) fn main() { let a = read().trim().parse::<i32>().unwrap(); let t = read(); let mut iter = t.split_whitespace().map(|i| i.parse::<i32>().unwrap()); let b = iter.next().unwrap(); let c = iter.next().unwrap(); let s = read(); println!("{} {s}", a + b + c) } fn read() -> String { let mut s = String::new(); std::io::stdin().read_line(&mut s).unwrap(); s.clone() } 文字列受け取って数値に変換するだけで手間かかりすぎでしたが、Rustの強力な型安全性やエラーハンドリングを考えると納得…ではあるんですが、やっぱり競技プログラミングには向いていない気がしますね。 というわけで今回はこれで👍

2026年4月18日 · にあえん

競プロ典型 90 問 Cross Sum

こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回はAtCoderの問題を解いていきます。 問題は以下です。 004 - Cross Sum(★2) 実装 二次元の累積和ですね。 とりあえず愚直に解いてみます。 package main import "fmt" func main() { var h, w int fmt.Scan(&h, &w) g := make([][]int, h) for i := 0; i < h; i++ { g[i] = make([]int, w) for j := 0; j < w; j++ { fmt.Scan(&g[i][j]) } } hg := make([]int, h) for i := 0; i < h; i++ { s := 0 for j := 0; j < w; j++ { s += g[i][j] } hg[i] = s } wg := make([]int, w) for i := 0; i < w; i++ { s := 0 for j := 0; j < h; j++ { s += g[j][i] } wg[i] = s } ans := make([][]int, h) for i := 0; i < h; i++ { ans[i] = make([]int, w) for j := 0; j < w; j++ { ans[i][j] = hg[i] + wg[j] - g[i][j] } } for i := 0; i < h; i++ { for j := 0; j < w; j++ { if j < w - 1 { fmt.Printf("%d ", ans[i][j]) } else { fmt.Printf("%d", ans[i][j]) } } fmt.Println() } } ですがこれだとタイムオーバーしてしまいました。 ...

2026年4月17日 · にあえん