にあえん

主にバックエンド・インフラ周りをやってます。 あそびばはこちら -> ナナオのあそびば

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

横浜中華街にバイキングを食べに行った

こんにちは、ナナオです。 昨日は急に中華バイキングを食べに行きたくなり、夕方から横浜中華街まで行ってきました。 言ってきた店はこちらです。 Google マップ エビチリとか麻婆茄子とか春巻きとか豆苗とかいろいろ食べてきました。 北京ダックは特に美味しかった。。。 エビの紹興酒漬けとか豚足とか珍しいのもありました。(豚足は撮るの忘れました) あとパクチーサラダとか牛筋とパクチー和えみたいなのがあったので、パクチー好きとして見逃すわけにはいかず注文しました。 しかし期待していたパクチーの癖の強さが抑えられていたように感じました。 その後もチャーハンや堅焼きそばなどドカ食いしました。 が、店を出た後に異変が!! 食べすぎたせいかわかりませんが、お腹があまりにも苦しく、歩くと吐き気がするように。。 休み休みで帰りましたが、結構辛くてしんどかったです。 二人で6000円とかなりコスパは良かったんですが、もしかしたら使っている油の質が良くなかった可能性はありますね。。 まぁでも全体的においしかったので満足です。 ということで今回はこれで👍

2026年4月21日 · にあえん

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

品川のピザを食べに行く

こんにちは、ナナオです。 今日は品川にピザを食べに行ってきました。 お店はこちらです。 Google マップ こちらのピザを食べました。 とにかく生地がおいしかったです。 ただピザ自体は普通のサイズよりも小さかったので、ボリューム不足は感じました。 また、一回の食事で二人で7000円くらいかかったので、コスパはそこまでよくないですね。 二回目はないかな…。 ということで今回はこれで👍

2026年4月16日 · にあえん

paizaの練習問題を解く 【マップの扱い 4】マップのナンバリング Go編

こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 【マップの扱い 2】マップの書き換え・縦横 | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】 実装 以下のように実装しました。 (解答例のpythonコードをgoに書き換えただけですが…) package main import "fmt" func main(){ var h, w, d int fmt.Scan(&h, &w, &d) g := make([][]int, h) for i := 0; i < h; i++ { g[i] = make([]int, w) } min := func(a, b int) int { if a > b { return b } else { return a } } c := 1 switch d { case 1: for i := 0; i < h; i++ { for j := 0; j < min(w, i + 1); j++ { g[i - j][j] = c c++ } } for i := 1; i < w; i++ { for j := 0; j < min(h, w - i); j++ { g[h - 1 - j][i + j] = c c++ } } case 2: for i := 0; i < h; i++ { for j := 0; j < w; j++ { ty, tx := i, j g[ty][tx] = c c++ } } case 3: for i := 0; i < w; i++ { for j := 0; j < h; j++ { ty, tx := j, i g[ty][tx] = c c++ } } case 4: for i := 0; i < w; i++ { for j := 0; j < min(h, i + 1); j++ { g[j][i - j] = c c++ } } for i := 1; i < h; i++ { for j := 0; j < min(w, h - i); j++ { g[i + j][w - 1 - j] = c c++ } } } for i := 0; i < h; i++ { for j := 0; j < w; j++ { fmt.Printf("%d", g[i][j]) if j < w - 1 { fmt.Print(" ") } } fmt.Println() } } これに関してはなんか複雑で自分でよくわかっていません。。。よくないとはわかりつつも。。。 ...

2026年4月15日 · にあえん

パフェと温泉に行った日

こんにちは、ナナオです。 今日は会社の友達と温泉に行ってきました。 行ったのは蒲田にある改正湯という温泉です。 改正湯(大田区|蒲田駅) 「黒湯温泉+炭酸泉」は世界でここだけ! 「サメ温泉」の愛称でも親しまれる銭湯 | 【公式】東京銭湯/東京都浴場組合 いやぁ気持ちよかったです。 風呂上りはこちらのカフェで一息。 Google マップ そしてここでパフェを食べました。 美味しかった~ パフェを食べながら「どうやったらいいプロダクトを作れるか?」とか「どんな風にプロダクトを作るか」といった話をしました。 そして帰りに煮干しラーメンを食べました。 蒲田を満喫できた一日でした。 ではまた👍

2026年4月14日 · にあえん

paizaの練習問題を解く 【マップの扱い 3】マップの判定・縦横斜め Go編

こんにちは、ナナオです。 前回に引き続き競プロを実施していきたいと思います。 今回の問題は以下です。 【マップの扱い 3】マップの判定・縦横斜め | レベルアップ問題集 | プログラミング学習サイト【paizaラーニング】 実装 最初は以下のように実装しましたが、この実装だとダメでした。 縦横斜めのカラムを反対にするのではなく、すべてのカラムを反対にしているからです。 package main import "fmt" func main(){ var h, w, sy, sx int fmt.Scan(&h, &w) g := make([]string, h) for i := 0; i < h; i++ { fmt.Scan(&g[i]) } repl := func(sy, sx int, r rune) { runes := []rune(g[sy]) runes[sx] = r g[sy] = string(runes) } fmt.Scan(&sy, &sx) for dy := -20; dy <= 20; dy++ { for dx := -20; dx <= 20; dx++ { ty, tx := sy + dy, sx + dx if ty >= 0 && tx >= 0 && ty < h && tx < w { if g[ty][tx] == '.' { repl(ty, tx, '#') } else { repl(ty, tx, '.') } } } } for i := 0; i < h; i++ { fmt.Println(g[i]) } } ということで解答例を見つつ修正します。 ...

2026年4月13日 · にあえん