はじめに
この記事では、AtCoder Beginner Contest(以下、ABC)の出題傾向をまとめています。part1では、ABC200~225を、そして今後はABC300までを予定しています。
なぜABC200~300なのか。
それは、ABCの問題を解くために必要な典型テクニックが網羅されているからです。(darake調べ)
なぜ25回ごとに記事を分けるのか。
基本的にABCは毎週末に開催されています。月に4回あるとして、100回分をまとめた場合、約2年分に相当します。そうすると傾向という言葉とは少し違うように思いませんか。
「え、2年前の出題傾向が本当に役に立つの?」
分かります。確かに傾向は変化していますが、基本的に必要な知識や考え方は変わっていないように感じます。そうすると25回に分ける必要もない気がしてきますが、何に重点を置いて勉強すればよいかという目安にはなると思います。ある程度の目星を付けることで、問題が解けるという楽しさを味わえる可能性が高まるなら、決して悪ではないでしょう。
対象者
・これから競技プログラミングを始める人。
・プログラミングの基礎をある程度学んでいる人。(具体的には、AtCoder Programming Guide for beginners (APG4b)がなんとなく分かる程度)
・AtCoderのレートが灰色~茶色ぐらいの人。
使い方
添付資料は 2つ あります。A,B問題とC問題でグラフや資料の内容を変えています。A,B問題はプログラムの基礎、C問題はテーマ別に分類しています。
1つ目のグラフは、25回のうち、何回出題されたかが分かります。特に これを勉強しようというのが決まっていないなら、参考になる と思います。
2つ目の資料は、対象の問題を解く為に、どういう知識や考え方が必要なのかをまとめています。これは、問題が解けなかった時、何が分かっていて、何が分かっていないのかを知るために使ってください。 例えば、「この問題はオーバーフローが分かれば解けた。でも解けなかったのは、intは知ってたけどlong longについての充分な知識がなかったからだ。intとlong longで表現できる数値はどれくらい?同じ知識が必要な別問題を解いてみよう。」とすれば、不足知識を定着させることもできると思います。
*ポイントの部分は無視してください。 スピード重視で記事を作成しているため、対象の問題とポイントの内容がずれています。修正予定ですが、先に投稿します。
資料
おわりに
正直に言います。この記事を書くべきか迷いました。出題比率が高いところが注目されるので、あまり出題されない問題には目を向けられないかもしれないからです。レート向上も良いですが、色々な知識に触れる機会が減ってしまうのはもったいないなと思っています。
一方で、実は、C問題でも座標圧縮(座圧)が出題されていることを見逃してはいけません。記憶がおぼろげで申し訳ないですが、B問題でも座圧が使えるものがあったような気がします。座圧で躓いている方は、解いてみても良いと思います。
この記事の本当の目的は、そういうところに焦点を当てられるところだとも言えるでしょう。
記事が長いと眠くなりますね。早速AtCoder Problemsで問題を解きましょう。