💻 AtCoder というのは、制限時間内にプログラミングでアルゴリズム問題を解くコンテストサイトで、私は「nullpointerlog」という名前で挑戦しています。
---
結果は、A〜D問題まで無事にAC(Accepted)でき、**4完達成!✨**
D問題のACまで残り30分余っていたので、かなり余裕をもって進められました。
一方でE問題はまったく歯が立たず…。
「境界を見つける」系の問題だったようですが、時間内には手も足も出ませんでした。
レートも **517 → 538(+21)** に上昇!
---
## ✅ A問題 [A - Is it rated?](https://atcoder.jp/contests/abc405/tasks/abc405_a)
単純に入力値をチェックするだけの処理。
迷うところもなく、落ち着いて書けばすぐにACできる問題でした。
---
## ✅ B問題 [B - Not All](https://atcoder.jp/contests/abc405/tasks/abc405_b)
数列の末尾から順に削除していき、
**M種類すべての数字が存在するようになるのは何回目か?** を問う問題。
- `set`型を使って、整数の種類数をカウント
- 種類数が初めてMになったインデックスから答えを求めました
追加のテストケースとして、種類数が1となるケースも確認しました。
解説では、素直に末尾から削除して、
全種類が存在しなくなるタイミングを探す方針が紹介されていました。
処理は、2重ループにはなりますが、M・Nは最大100なので、時間的には問題なしです。
---
## ✅ C問題 [C - Sum of Product](https://atcoder.jp/contests/abc405/tasks/abc405_c)
配列Aに対して、`1 ≤ i < j < N` となるすべての組 `Ai * Aj` の総和を求める問題。
Nは最大で `3 × 10^5` と非常に大きいため、
全ての組み合わせを直接計算すると間に合いません。
そこで式を次のように整理します:
① A1 * (A2 + A3 + A4 ...)
② A2 * (A3 + A4 ...)
③ A3 * (A4)
このように、後ろの要素の合計をあらかじめ用意し、
前から順に掛けていけば、**O(N)** の計算量で解くことができます。
典型的な式変形により計算時間を短くする問題だと思いました。
---
## ✅ D問題 [D - Escape Route](https://atcoder.jp/contests/abc405/tasks/abc405_d)
2次元マトリックス上で、各通路の点から非常口(E)へ向かうとき、
**最短経路を辿るための移動方向(↑↓←→)を出力する問題**。
まずは、下記のような**幅優先探索(BFS)**を思いつきました。
- 出口(E)から逆方向にBFS
- 各地点に最短経路の方向を記録しながら進む
- キューにEの座標を入れて、4方向に探索していく構成
解きやすい問題だと感じました。
---
## ❌ E問題 [E - Fruit Lineup](https://atcoder.jp/contests/abc405/tasks/abc405_e)
4種類の果物(リンゴ・オレンジ・バナナ・ブドウ)と、
それぞれの位置関係の制約が与えられた並べ方の通り数を求める問題。
制約を整理すると以下のような条件が:
リンゴ オレンジ バナナ ブドウ
左 右
左 右
左 右
…このように、**複数の「◯は×より左」**という条件が同時に存在する中で、
全体として成立する並べ方をカウントする必要があります。
この問題は、本番中に解法を思いつくことはできず…。
公式解説や他の正解者のコードを見ると、いろいろなアプローチがあるようでした。
**今後の課題としてじっくり取り組みたいと思います。**
---
## 📝 まとめ
今回は **ABC405で4完達成+レートも上昇!🎉**
C問題では計算量の工夫が活き、D問題はBFSでスムーズに解けたこともあって、
全体的に手応えのある回でした。
一方でE問題では、典型的な順列や制約処理の解法がすぐに出てこなかったのが課題。
**引き出しの強化・整理が今後のテーマ**です。
---
次回も D問題まで安定して解き切って、
E問題にもチャレンジできるように!💪
“4完常連”を目指して、引き続きがんばります🔥
競プロに挑戦中の方、ぜひ一緒に成長していきましょう😊