はじめに
水コーダーになることを目標として精進の過程で苦手なパターンを洗い出し、まとめることでパフォを安定させることを目的としてこの記事を書いています。筆者はPythonと精進限定でC++で問題を解いています。解いた問題は随時本記事に追加していきます。
「どのジャンルの問題をどれくらい解いたか」を参考にしていただければと思います。
緑コーダーになるまでにまとめた問題集↓
精進したAtCoderの問題を分類する(〜rating800)
(2023/04/01)入水しました!!!
AtCoder ProblemsのDifficulty Pies
二分探索
-
キーエンスプログラミングコンテスト2021-Nov. (AtCoder Beginner Contest 227) D - Project Planning
青diffです -
AtCoder Beginner Contest 144 E - Gluttony
少しエスパーが必要ですが、二分探索の良い練習になります。 -
AtCoder Regular Contest 050 B - 花束
判定問題をどう考えるか -
AtCoder Beginner Contest 194 E - Mex Min
やはり判定問題を考えるのが難しいです… -
AtCoder Beginner Contest 216 E - Amusement Park
どのような判定問題に落とし込むかが難しい…
「少なくともこれ以上はこれができる」みたいなイメージ? -
AtCoder Beginner Contest 124 D - Handstand
考察実装ともに数分で解けたのでOK -
AtCoder Beginner Contest 146 C - Buy an Integer
判定に関してはO(1)でできるので、二分探索で解けます。 -
NECプログラミングコンテスト2021(AtCoder Beginner Contest 229) D - Longest X
尺取り法でも解けますが、二分探索でも解けます。
累積和を使った二分探索 -
AtCoder Beginner Contest 246 D - 2-variable Function
コンテスト中にACしました。尺取りでも解けるらしいです。尺取りで解けるものは決め打ち二分探索でも解けるのかも? -
AtCoder Beginner Contest 203(Sponsored by Panasonic)D - Pond
「中央値をlimit以下にできるかどうか」というO(N)の判定問題で二分探索 -
日鉄ソリューションズプログラミングコンテスト2022(AtCoder Beginner Contest 257) D - Jumping Takahashi 2
「必要なジャンプ力の最小値」を求める問題。 -
AtCoder Regular Contest 144 B - Gift Tax
ARCの問題ですがかなり典型的な問題です。 -
UNICORNプログラミングコンテスト2022(AtCoder Beginner Contest 269) E - Last Rook
インタラクティブ問題での二分探索 -
AtCoder Beginner Contest 296 D - M<=ab
246Dの類似問題。実家のような安心感。
積を取る問題がでたらまず絶対に片方を固定して探索範囲を絞れないか確認する!!!
三分探索
-
トヨタシステムズプログラミングコンテスト2022(AtCoder Beginner Contest 279) D - Freefall
二分探索でも解けますが三分探索を理解するのにいい問題です -
AtCoder Beginner Contest 240 F - Sum Sum Max
一般項を求めるのが難しい…
DP
-
AtCoder Beginner Contest 224 E - Integers on Grid
(解説AC)青diffのDP。実装方法がためになる。 -
サイシードプログラミングコンテスト2021(AtCoder Beginner Contest 219) D - Strange Lunchbox
基本的なDPです。数をオーバーする時の扱いが勉強になりました。 -
EDPC F - LCS
(解説AC)Longest Common Substringです。かつっぱさんの動画を見ながら解説ACしました。 -
EDPC G - Longest Path
グラフのDPです -
EDPC H - Grid 1
BFSでDP -
EDPC P - Independent Set
DFSでDP(DFSしなくてもできるけど) -
競プロ典型 90 問 042 - Multiple of 9(★4)
桁の最後に1~9の数を使ったときに総和がk-i(i=1,…,9)の通り数が求まっていればk-i+iとなる通り数が分かる -
EDPC I - Coins
確率です -
競プロ典型 90 問 035 - Preserve Connectivity(★7)
かつっぱさんの動画を参考にしました
LCAを使ってDPをしていきます -
M-SOLUTIONS プロコンオープン2021(AtCoder Beginner Contest 232) E - Rook Path
こういった問題を本番で解けるようになりたい -
AtCoder Beginner Contest 242 E - (∀x∀)
桁でなんとかする。最後の場合分が謎 -
AtCoder Beginner Contest 244 E - King Bombee
コンテスト中にACしました。最初の思いついた方針があってたっぽいけど遷移を考えるときにミスったっぽい。 -
AtCoder Beginner Contest 212 E - Safety Journey
制約に注目。ある程度エスパーして考察するのもいいかもしれない。 -
AtCoder Beginner Contest 178 D - Redistribution
次のDPの遷移を考えるときに必要な値をメモしてO(1)で求められるようにしておく。(メモ化のきもちが少しわかったかも) -
AtCoder Beginner Contest 207 E - Mod i
累積和と余りを利用して、メモ化しながらDPをしていきます。難しいです。解説を理解するだけでかなり時間がかかりましたが、このような問題を解いてレートを爆上げしたい。 -
AtCoder Beginner Contest 247 F - Cards
隣り合うものどちらかの辺を選ばないといけないという制約のもと、その通り数を数えていく。 -
AtCoder Beginner Contest 183 E - Queen on Grid
grid上をDPしていく問題。累積和を縦横斜めそれぞれ別の二次元配列で管理するところがポイント。
最初BFSと考えたが、累積和と気付いてそこからDPを考えた。ある点の値が確定する瞬間に検討をつけて遷移を考える。 -
AtCoder Beginner Contest 153 E - Crested Ibis vs Monster
制約をしっかりみると基本的なDPであることがわかります。ナップザックDPっぽい雰囲気を感じ取ってACしました。 -
AtCoder Beginner Contest 234 F - Reordering
遷移は自力で思いついたのでOK。combinationをメモ化で求めておく方法が参考になった。 -
ユニークビジョンプログラミングコンテスト2022(AtCoder Beginner Contest 248) F - Keep Connect
連結状態を持つDP。答えを見てみると非常にシンプルだがかなり難しかった… -
AtCoder Beginner Contest 145 E - All-you-can-eat
基本的なDP。今なら緑diffだろうなあ… -
京セラプログラミングコンテスト2021(AtCoder Beginner Contest 200) D - Happy Birthday! 2
部分和問題 -
AtCoder Beginner Contest 135 D - Digits Parade
Mod i を理解していれば簡単です。 -
NOMURA プログラミングコンテスト2022(AtCoder Beginner Contest 253) E - Distance Sequence
緑上位diffのDPです。高速化の方法をすぐ思いつけたので本番ACできました。 -
第三回日本最強プログラマー学生選手権-予選-(AtCoder Beginner Contest 262)D - I Hate Non-integer Number
実行制限時間が2.5秒でいつもより0.5秒長い -
AtCoder Beginner Contest 265 E - Warp
細かい高速化を挟めばPythonでもギリギリ辞書型で通せる -
NECプログラミングコンテスト2022 (AtCoder Beginner Contest 267) D - Index × A(Not Continuous ver.)
レートを上げるにはDPが解けないといけない -
京セラプログラミングコンテスト2022(AtCoder Beginner Contest 271) E - Subsequence Path
求めたいものをしっかりと把握しよう -
キーエンスプログラミングコンテスト2022(AtCoder Beginner Contest 274) D - Robot Arms 2
問題文をしっかり読んで理解しよう -
AtCoder Beginner Contest 275 F - Erase Subarrays
PythonでTLEしましたが、DP配列を全て1次元に分解すると通りました。 -
AtCoder Beginner Contest 215 E - Chain Contestant
小さい制約に気を付けてDPする。bitで状態を持つDP。 -
AtCoder Beginner Contest 285 E - Work or Rest
手で色々なケースを書いてみることが大事。 -
ユニークビジョンプログラミングコンテスト2022 冬(AtCoder Beginner Contest 283) E - Don't Isolate Elements
めちゃくちゃ実装が重い。 -
Sky株式会社プログラミングコンテスト2023(AtCoder Beginner Contest 289)E - Swap Places
「状態」のDP。状態の発想が出てこなかった。
グラフ
BFS
-
AtCoder Beginner Contest 224 D - 8 Puzzle on Graph
状態遷移をBFSする問題。いろいろテクニックが必要なので難しい。 -
AtCoder Beginner Contest 151 D - Maze Master
グリッド上のBFS。目標時間20分。 -
AtCoder Beginner Contest 146 D - Coloring Edges on Tree
BFSで解きました。 -
EDPC H - Grid 1
BFSでDP -
AtCoder Beginner Contest 176 D - Wizard in Maze
ワープ後に塗り替えられる可能性を考慮してBFSをする
結構良い問題で好きです -
AtCoder Beginner Contest 184 E - Third Avenue
ワープする系BFSでした。
queueに突っ込むタイミングに少し迷いましたが、BFSの性質を理解してそのまま実装すれば難しくはありません。 -
AtCoder Beginner Contest 246 E - Bishop 2
(解説AC)枝刈りBFSをしました。01BFSよりも考え方が簡単な気がします。(参考解説記事) -
AtCoder Beginner Contest 213 E - Stronger Takahashi
01BFSです。その場所から壁を破壊して到達できる区画だけを+1してappendする。distでしっかりqueueに突っ込まない場合分けを書くのがポイント。 -
AtCoder Beginner Contest 160 D - Line++
BFSをN回できるのがポイント。組み合わせを全探索する。 -
AtCoder Beginner Contest 188 E - Peddler
トポロジカルソートでも解けますが、普通のBFSでも解けます
X_i < Y_i という制約からDAGになるとういことが言えるそうです -
AtCoder Beginner Contest 272 D - Root M Leaper
飛ぶ座標の位置は限られている
DFS
-
AtCoder Beginner Contest 138 D - Ki
基本的なDFS。再帰でPyPy3を使うとTLEしてしまうので注意! -
AtCoder Beginner Contest 198 E - Unique Color
BFSしようとするとそのつど配列を作り直さないといけないのでTLEになります。 -
AtCoder Beginner Contest 236 D - Dance
計算量の見積もりが難しいDFSです。常に小さい値を選択する工夫がないとTLEになります。
このような問題だと、再帰の深さが浅いので、PythonではTLEになりますがPyPyだとACできます。特殊な例なので注意。 -
AtCoder Beginner Contest 220 F - Distance Sums 2
(解説AC)部分木を求めた後に答えを求めていきます。これはDP? -
EDPC P - Independent Set
DFSで部分木に対する情報をまとめていく -
エクサウィザーズプログラミングコンテスト2021(AtCoder Beginner Contest 222)E - Red and Blue Tree
制約をしっかり見ればDFSできることに気付けます -
デンソークリエイトプログラミングコンテスト2022(AtCoder Beginner Contest 239) E - Subtree K-th Max
制約をよく見ましょう -
AtCoder Beginner Contest 240 E - Ranges on Tree
コンテスト中に5完できて初めて水パフォが出せました!!! -
AtCoder Beginner Contest 054 C - One-stroke Path
Nが非常に小さいことからシンプルにDFSをするだけでできます
8!は5040通りで非常に小さい。パスの種類の上限は2~Nの順列の個数。 -
競プロ典型 90 問 072 - Loop Railway Plan(★4)
グリッドの範囲がかなり狭いのでDFSで全探索をします -
AtCoder Beginner Contest 266 F - Well-defined Path Queries on a Namori
向きのないFunctional Graphはなもりグラフというらしい? -
ユニークビジョンプログラミングコンテスト2022 夏(AtCoder Beginner Contest 268) D - Unique Username
小さい制約に注目しましょう -
トヨタ自動車プログラミングコンテスト2022(AtCoder Beginner Contest 270) C - Simple path
DFSで探索するかBFSで経路復元するか
色々な解き方があるのでチェックしておこう -
AtCoder Beginner Contest 133 E - Virus Tree 2
DFSで組み合わせを求める。
Union-Find
-
NECプログラミングコンテスト2021(AtCoder Beginner Contest 229) E - Graph Destruction
グラフの分割は逆からUnion-Find -
AtCoder Beginner Contest 226 E - Just one
閉路判定は頂点の数>=辺の数
単純な閉路判定だけならUnionFindだけで可能 -
デンソークリエイトプログラミングコンテスト2022(AtCoder Beginner Contest 239) F - Construct Highway
(解説AC)次数の問題です。UFの使い方が参考になりました。 -
freee プログラミングコンテスト2022(AtCoder Beginner Contest 264)E - Blackout 2
逆からUnion-Find
発電所をまとめておくという発想で実装を楽にできる -
UNICORNプログラミングコンテスト2022(AtCoder Beginner Contest 269) D - Do use hexagon grid
10分で解けるようにしよう -
トヨタ自動車プログラミングコンテスト2022(AtCoder Beginner Contest 270) F - Transportation
空港と港をそれぞれ別の頂点を追加して管理することでクラスカル法を適用することができる
頂点を追加する実装方法は典型? -
HHKBプログラミングコンテスト2022 Winter(AtCoder Beginner Contest 282) E - Choose Two and Eat One
考察メインで分かればあとはやるだけ
最短経路問題
ダイクストラ
-
AtCoder Beginner Contest 237 E - Skiing
ポテンシャルという概念が必要です。難しいです。水色下位のdiffじゃないです。 -
SOMPO HD プログラミングコンテスト2021(AtCoder Beginner Contest 192) E - Train
シンプルなダイクストラです。実装する際にミスをしてTLEを連発したのでちゃんとしたダイクストラを使えるようになりましょう。(ダイクストラ法のよくあるミス) -
AtCoder Beginner Contest 252 E - Road Reduction
コンテスト中にダイクストラであることに気づけませんでした -
AtCoder Beginner Contest 191 E - Come Back Quickly
有向辺をひっくり返したりゴールの頂点を新しく作ったりなど
ワーシャルフロイド
-
AtCoder Beginner Contest 208 D - Shortest Path Queries 2
ワーシャルフロイド -
AtCoder Beginner Contest 073 D - joisino's travel
小さい制約に注目してみましょう -
AtCoder Beginner Contest 079 D - Wall
やるだけワーシャルフロイド -
AtCoder Beginner Contest 243 E - Edge Deletion
ワーシャルフロイドまでは一瞬で思いついたのですが、辺の削除がわかりませんでした。 -
ウルシステムズプログラミングコンテスト2023(AtCoder Beginner Contest 286)
24分で本番AC
制約からエスパーしてDPの要領で答えを求めました。
トポロジカルソート
-
AtCoder Beginner Contest 223 D - Restricted Permutation
やるだけトポロジカルソートです。これを機にライブラリ化しておきましょう。 -
EDPC G - Longest Path
DAGであるということがポイントになります -
AtCoder Beginner Contest 291(Sponsored by TOYOTA SYSTEMS)E - Find Permutation
トポロジカル順が一意に決まるかどうかを判定する
強連結成分分解
-
競プロ典型 90 問 021 - Come Back in One Piece(★5)
DFSやら帰りがけ順やらで強連結成分分解をします -
東京海上日動プログラミングコンテスト2022(AtCoder Beginner Contest 256)E - Takahashi's Anguish
図を書いて、使えそうな良い性質があるかどうか考えてみましょう。
コンテスト中にACできました。 -
AtCoder Beginner Contest 296 E - Transition Game
この問題で入水を決定づけることができました。
bitDP
-
キーエンスプログラミングコンテスト2022(AtCoder Beginner Contest 274) E - Booster
前計算できるものはしておきましょう。
構築
-
デンソークリエイトプログラミングコンテスト2022(AtCoder Beginner Contest 239) F - Construct Highway
(解説AC)次数の問題です。難しい… -
AtCoder Beginner Contest 131 E - Friendships
(解説AC)自力ACすべきだったと思いました…
「最大最小を考えてその中の任意の値に対応できるか」を考えるといいかも。おそらく最大最小内はできるものが多そう
その他
-
パナソニックグループプログラミングコンテスト2022(AtCoder Beginner Contest 273) E - Notebook
終了間際にグラフに落とし込めそうと思ったけど実装まではいかなかった
面白い問題です
BIT(Binary Indexed Tree)
-
AtCoder Beginner Contest 221 E - LEQ
BITの使い方や逆元の使い方などを学べたので非常に教育的な良問だと思っています。
(参考記事:解説・ BIT・逆元・Fermatの小定理 ) -
パナソニックプログラミングコンテスト2021(AtCoder Beginner Contest 231) F - Jealous Two
もうちょっとで解けそうだった… -
AtCoder Beginner Contest 241(Sponsored by Panasonic) D - Sequence Query
クエリ先読みで使う数値をあらかじめ決めて座標圧縮したあとBITでクエリを処理していく
tatyamさんのSortedMultisetでも解けます!
SegmentTree
-
トヨタシステムズプログラミングコンテスト2021(AtCoder Beginner Contest 228) D - Linear Probing
セグ木で殴ってみたい人におすすめです -
AtCoder Beginner Contest 179 D - Leaping Tak
区間取得一点更新のセグ木でDPを高速化 -
AtCoder Beginner Contest 281 E - Least Elements
セグ木とSortedMultisetどちらを使っても解けます。
後者のほうが実装が簡単です。
遅延評価セグメント木
-
競プロ典型 90 問 029 - Long Bricks(★5)
遅延評価をするためには、実現したい操作を線形変換で表現する必要があるそうです。ライブラリはACL-for-pythonのものを借りました。
しゃくとり法
-
AtCoder Beginner Contest 250 E - Prefix Equality
比較する場面は集合の大きさが同じ時だけ
Zobrist hashで解く方法もあるそうです -
AtCoder Beginner Contest 250 F - One Fourth
(解説AC)幾何の問題です。かつっぱ先生の動画を見ていると色々勉強になります。。
貪欲
-
AtCoder Beginner Contest 137 D - Summer Vacation
(解説AC)制約がキツい方から考える -
AtCoder Beginner Contest 245 E - Wrapping Chocolat
SortedMultisetで解きました。「制約のキツい方から考える」「片側を固定する」で縦に余裕のある箱のうち、一番横幅がキツくなるものを順番に当てはめていくと良い。
距離
-
AtCoder Beginner Contest 102 C - Linear Approximation
マンハッタン距離の最小化は中央値 -
AtCoder Beginner Contest 178 E - Dist Max
マンハッタン距離の最小化は45度回転してx+y,x-yそれぞれの中での絶対値の大きい方
bit
-
モノグサプログラミングコンテスト2022(AtCoder Beginner Contest 238) D - AND and SUM
エスパーで本番通しました。bitごとに考えてみましょう -
AtCoder Beginner Contest 185 F - Range Xor Query
XORの性質を考えるとあるデータ構造が使えることが分かります -
AtCoder Beginner Contest 117 D - XXOR
制約に注意しましょう -
AtCoder Beginner Contest 242 D - ABC Transform
(解説AC)周期性を見つける
二分木の前からK番目は2進数にして0だと左1だと右に進む(みたいな(よくわからないです…)) -
AtCoder Beginner Contest 261 E - Many Operations
これもなかなか面白い問題
indexを入力の情報として出力を配列の中身にするとうまく実装できる -
AtCoder Beginner Contest 295 D - Three Days Ago
ひとつひとつの文字列の種類は0~9なのでbitで状態をもつことができる。
「偶奇を持てばよい」、「bitで管理できる」という発想が必要。
ゲーム系
Sparse Table
-
HHKBプログラミングコンテスト2022 Winter(AtCoder Beginner Contest 282) F - Union of Two Sets
すごく教育的な問題なので聞いたことがない人はぜひこの問題で履修してみてください。
Mo's algorithm
-
AtCoder Beginner Contest 293 G - Triple Index
Kiriさんのコードからライブラリを窃盗してしまいました(自白) -
AtCoder Beginner Contest 242 G - Range Pairing Query
Pythonだと遅くて高速化に工夫が必要
入力が多いため入力の高速化や、状態遷移の高速化を行った
二次元累積和
-
AtCoder Beginner Contest 106 D - AtCoder Express 2
Nが小さいときは考えるといいかも
二次元いもす法
数学問題
幾何
-
ユニークビジョンプログラミングコンテスト2022(AtCoder Beginner Contest 248)E - K-colinear Line
割り算ではなく掛け算で同じ直線上にあるかを判定するという典型テクニック。
あとは同じ点をカウントしないように数えればOK。 -
AtCoder Beginner Contest 250 F - One Fourth
(解説AC)幾何の問題です。かつっぱ先生の動画を見ていると色々勉強になります。。 -
AtCoder Beginner Contest 259 D - Circumferences
円の問題です。2つの円が交わっているかどうかの判定をしましょう。
判定方法をライブラリ化しておけば安心ですね
包除原理
-
AtCoder Beginner Contest 206(Sponsored by Panasonic) E - Divide Both
約数系包除原理です -
AtCoder Beginner Contest 246 F - typewriter
この問題で包除原理を理解しました。 -
NOMURA プログラミングコンテスト2022(AtCoder Beginner Contest 253) D - FizzBuzz Sum Hard
知識がある人からすると自明なのでしょうが、僕はだめでした…
鳩の巣原理
-
AtCoder Beginner Contest 174 C - Repsept
全くわかりませんでした…。漸化式立てたりmodで考えたりする発想が難しい。。
GCD
フェルマーの小定理
-
トヨタシステムズプログラミングコンテスト2021(AtCoder Beginner Contest 228) E - Integer Sequence Fair
-
AtCoder Beginner Contest 034 C - 経路
大きい数のcombinationの方法を学びました -
AtCoder Beginner Contest 156 D - Bouquet
pow()がポイントです(逆元)
約数&素数
-
AtCoder Beginner Contest 142 D - Disjoint Set of Common Divisors
公約数の中からある性質の数を高速に求める問題です -
AtCoder Beginner Contest 172 D - Sum of Divisors
(解説AC)maspyさんの解説記事を見ましたが計算量の見積もりが難しいです…… -
AtCoder Beginner Contest 125 C - GCD on Blackboard
dictを使って高速化しました -
AtCoder Beginner Contest 112 D - Partition
まず条件が成り立つ時を考えてからそれを満たす状態を全探索。 -
AtCoder Beginner Contest 254 D - Together Square
難しいです。片方を固定してもう片方をどうやって高速に求めるかを考えました。 -
AtCoder Beginner Contest 259 E - LCM on Whiteboard
条件をしっかり確認。Eの水diffとしては簡単な方?
mod
-
AtCoder Beginner Contest 164 D - Multiple of 2019
余りが重要になってくる。それくらいしか言うことがない。
期待値
-
AtCoder Beginner Contest 266 E - Throwing the Die
期待値DPらしいですが難しいです… -
デンソークリエイトプログラミングコンテスト2022 Winter(AtCoder Beginner Contest 280) E - Critical Hit
典型的な期待値DPです。こちらのページが参考になります。 -
LINE Verda プログラミングコンテスト(AtCoder Beginner Contest 263) E - Sugoroku 3
上の問題を解いてからみると理解できました。
その他
-
AtCoder Beginner Contest 233 E - Σ[k=0..10^100]floor(X/10^k)
下の桁から決定していく。 -
AtCoder Beginner Contest 245 D - Polynomial division
多項式の割り算です。頭がバグりました。pythonには便利なライブラリがあるそうです。
ダブリング
-
AtCoder Beginner Contest 241(Sponsored by Panasonic) E - Putting Candies
参考記事:https://algo-logic.info/doubling/ -
AtCoder Beginner Contest 167 D - Teleporter
周期性のある問題をダブリングで解く -
AtCoder Beginner Contest 179 E - Sequence Sum
けんちょんさんの解説記事を参考にしました -
AtCoder Beginner Contest 136 D - Gathering Children
この問題は答えがある一つの場所に収束するため、最終的な答えの求め方が特殊でした -
AtCoder Beginner Contest 293 E - Geometric Progression
数式を書いてみて考えることで方針が見えるかも
半分全列挙
-
京セラプログラミングコンテスト2022(AtCoder Beginner Contest 271) F - XOR on Grid Path
「言われてみれば確かに…」な制約ですね
式変形系
-
AtCoder Beginner Contest 166 E - This Message Will Self-Destruct in 5s
等式を作り片方を固定して、もう片方の値を高速に求める
絶対に小数誤差許さないマン問題
-
AtCoder Beginner Contest 191 D - Circle Lattice Points
Decimal.sqrt()
なるものがあるのを知りました。
四角形敷き詰める系問題
-
AtCoder Beginner Contest 062 C - Chocolate Bar
制約をちゃんと見れば解けるかも -
AtCoder Beginner Contest 196 D - Hanjo
制約が小さいのでDFSをする -
サイシードプログラミングコンテスト2021(AtCoder Beginner Contest 219)E - Moat
制約が小さい! -
AtCoder Beginner Contest 223 E - Placing Rectangles
3つの四角形の敷き詰め方は2通りしかないので向きと長さを変えて全探索する
考察典型
主客転倒
それぞれの要素がどれくらい関与しているかを数える
平面走査
-
ユニークビジョンプログラミングコンテスト2022 冬(AtCoder Beginner Contest 283) F - Permutation Distance
i, j の順序を考えて更新したり、大小を固定するなど
Ad-hoc
-
AtCoder Beginner Contest 293 F - Zero or One
クソむずい。「こうすれば解ける」ということは分かるけど、なんでその条件が出てくるのか分からない。
解説に「こうしたい」「こういう気持ちになる」とか書いてくれれば嬉しいんだけどなぁ…
要早解き
シミュレーション
-
ユニークビジョンプログラミングコンテスト2022 冬(AtCoder Beginner Contest 283) D - Scope
スタックを使ってシミュレーションする。
「スタックを使ってシミュレーションできないか」をまず考える、という癖をつけていてもいいかもしれない。 -
AtCoder Beginner Contest 294 E - 2xN Grid
イベントソートをした後に区間をうまいこと処理して数える
個人的に区間の処理が苦手なので練習する必要がある
全探索
-
キーエンスプログラミングコンテスト2021-Nov. (AtCoder Beginner Contest 227) C - Repsept
これはもっと早く解きたかった… -
AtCoder Beginner Contest 129 D - Lamp
壁と壁の間の距離を計算する問題。両端に-1とw・hを置くと計算しやすい。
式変形系
-
AtCoder Beginner Contest 165 D - Floor Function
灰茶の時に比べ、「速い考察」が身に付いてきた気がする -
AtCoder Beginner Contest 167 D - Teleporter
処理を紙に書き出して落ち着いて手順を考える -
AtCoder Beginner Contest 108 C - Triangular Relationship
考察のスピードが必要。40分かかったがもう半分くらいで解きたい。
尺取り法
-
NECプログラミングコンテスト2021(AtCoder Beginner Contest 229) D - Longest X
バグらせない尺取り法をマスターしよう -
AtCoder Beginner Contest 247 E - Max Min
壁を作ってその通り数を数えていくのですが、難しいです。左を固定して右を全部数える、を繰り返す。
累積和
-
AtCoder Beginner Contest 105 D - Candy Distribution
modと累積和を利用した問題です。考察のスピードを上げたい…
「右側を固定して、条件を満たす左端を高速に数え上げるテク」というキーワードを頭に入れておきたい -
AtCoder Beginner Contest 181 E - Transformable Teacher
累積和で差の合計を持っておいて差分をO(1)で更新
20分くらいで解けるようになりたい……