Atcoder ABS ABC081B Shift only

こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 ABC081B - Shift only 実装 以下のように実装しました。 use proconio::input; fn main() { input! { n: u8, mut a: [u32; n], } let mut cnt = 0; loop { if !a.iter().find(|&&a| a % 2 != 0).is_some() { a = a.into_iter().map(|a| a / 2).collect(); } else { break; } cnt += 1; } println!("{cnt}"); } まぁまぁすっきり実装できたんじゃないでしょうか。 では今回はこれで👍

2026年4月22日 · にあえん

Atcoder ABS ABC081A Placing Marbles

こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 ABC081A - Placing Marbles 実装 以下のようにすっきり実装できました。 use proconio::{input, marker::Chars}; fn main() { input! { s: Chars, } let cnt = s.into_iter().filter(|c| c == &'1').count(); println!("{cnt}"); } proconio、マジで最高すぎる。。。 では今回はこれで👍

2026年4月20日 · にあえん

Atcoder ABS ABC086A Product

こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 ABC086A - Product 実装 前回は入力に手間取りましたが、今回はproconioというライブラリを使ってかなりすっきり書くことができました。 use proconio::input; fn main() { input! { a: i32, b: i32, } if a * b % 2 == 0 { println!("Even"); } else { println!("Odd"); } } いやぁ、標準入力がすっきり書けるだけでここまですっきり書けるようになるとは… 驚きです。 ということで今回はこれで👍

2026年4月19日 · にあえん

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 問 004 - 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日 · にあえん