今までAtCoderで経験した典型問題への解答のジャンル別整理

ここ半年ほど、AtCoder Beginner Contest(通称ABC)に参加することを継続している。

 

ABCに参加する主な目的としては、競技プログラミングを通じてアルゴリズムとデータ構造に関する教養をつけることと、それを客観的に示すことだ。

 

2020年2月9日現在のレートは506で、茶コーダーになっている(コンテスト実績で確認できる)。ただ最近、思っていたよりもパフォーマンスがでない。特にD問題以上になると以下の2点がボトルネックになっている。

  1. そもそも解法が思いつかない
  2. 解法はすぐに思いつくが、実装に時間がかかる

個人的には最低でも緑、がんばって水色まで行きたいので、上記2点に何らかの手をうちたい。1に関してはAtCoder Problemsでひたすら過去問を解いていく必要があるだろう。2に関してはC++14の言語仕様や、ABCの問題を解く上で知っておくべきコードを覚えておく必要があるだろう。

 

そこで今まで解いてきた問題、特に典型問題について、ACした解答を、一度ジャンル別に整理してみることにした。主に2に対する打ち手になるだろう。今後「あ、この問題以前やったことある!」という気持ちになったら、ここを参照してどういう風に実装していたかを思い出すことにする。ていうか、コピペするかな・・・。もちろん、何も見ずにコードをかければそれに越したことはないのだけれど、別段仕事で使っているわけでもないC++14を身体に覚えさせるには、やはりまだ時間が必要そうだ。

 

典型問題であるかどうかは割と主観で決めた。ジャンルについては蟻本の目次(主に初級編)に従ってみた。

 

(以下、過去のABCの解答あり。まだ解答していない、かつこれから解答する予定のある人は注意。)

 

↓↓

 


全探索

状態が2値ならビット演算子で全探索可能。
https://atcoder.jp/contests/abc128/submissions/10046498
(↑やや怪しいコード)

幅優先探索
https://atcoder.jp/contests/abc151/submissions/9969553

深さ優先探索
→未経験


貪欲法

https://atcoder.jp/contests/abc148/submissions/9072563

区間スケジューリング
https://atcoder.jp/contests/keyence2020/submissions/9585664
https://atcoder.jp/contests/abc131/submissions/9263145

 

動的計画法

解いた覚えはあるけどどれだったか忘れたため不記載

 

データ構造

優先度付きキュー
https://atcoder.jp/contests/abc141/submissions/9166698

 

グラフ

未経験

 

数学

素数
https://atcoder.jp/contests/abc142/submissions/9188911
最小公倍数
https://atcoder.jp/contests/abc070/tasks/abc070_c


2分探索

https://atcoder.jp/contests/abc146/submissions/8627947
(↑やや怪しいコード)



しゃくとり法

https://atcoder.jp/contests/abc143/submissions/11477394

※2分探索で解く方法もあり、こちらの方が重要。

 https://atcoder.jp/contests/abc143/submissions/8034764