競技プログラミングAtCoderをはじめよう
最近競技プログラミングにはまってます。世界三大競技プログラミングサイトがあり、1 つはなんと日本人が運営しています。AtCoder(アットコーダー)というサイトです。
競技プログラミングって?
標準入力に文字が渡されてくるので、その文字を処理して問題文の通りに処理する速さ、バグの少なさ、効率の良さを競う遊びです。
とりあえず簡単な問題を見てみましょう。
まずAtCoder Beginner Contest 168 の A 問題です。
問題文を読んで、そのとおりに書きます。数字が渡されるので、鉛筆の単位を答える問題です。普通に考えたら 1 なら「いっぽん」、2 なら「にほん」となりますね。なので 1 の場合は’pon’、2 の場合は’hon’と出力する問題です。
入力例、出力例をみてみる
入力例 1 は 16 となっています。16 本はじゅうろっぽんと発音するので、回答は’pon’となることが、出力例からわかります。
コンテストに参加してみよう!
このページを読んでくださる方なら、余裕で 1 問は正解できそうだなと思ったのではないでしょうか。1 問でも正解できそうなら、ぜひ参加してみましょう。
AtCoder は大きく分けて 4 種類のコンテストが開催されます。
- AtCoder Beginner Contest(ABC)
- AtCoder Regular Contest(ARC)
- AtCoder Grand Contest(AGC)
- 企業主催コンテスト
ABC,ARC,AGC の順で難しくなっていきます。最初に参加するコンテストは ABC が簡単なので良いでしょう。企業主催コンテストは、コンテストごとにまちまちです。慣れてきたら挑戦してみましょう。
コンテスト一覧ページでこれから開催されるコンテストの一覧が見れます。ABC はだいたい週に 1 回、土曜日か日曜日の 21:00(JST)に開催されます。
参加するまでに準備すること
チュートリアルは済ませておいたほうが良いです。 参加するには会員登録が必要です。ユーザ名とユーザ ID、それとメールアドレスを入力し、メールアドレスの受信確認するだけの簡単なものです。
何言ってるかぜんぜんわからないよ?
プログラミングをまったくやったことがない方は、入力を受け取るとか、さっぱりわからないと思います。そういう方も一回、チュートリアルを読んでみましょう。よく読むと
プログラミングが全くできない人は、
という一文があります。AtCoder には親切に、プログラミング未経験者向けのガイドも無料で公開されています。
# C++入門 AtCoder Programming Guide for beginners (APG4b)
すごくわかりやすいプログラミング入門記事なので、ぜひやってみましょう。プログラミングは楽しいです!
問題の得点
問題には点数があります。 一番簡単なのは ABC の a 問題で、100 点です。 b 問題が 200 点、c 問題が 300 点となっています。
100 点
100 点の問題は、入出力と if 文を理解していれば書ける簡単な問題です。プログラミングをやったことがない方は、100 点取得を目指しましょう。
200 点
200 点の問題も、プログラミングの基本がわかっていれば解ける問題です。if 文のみでなく、ループなども使いこなす必要があります。APG4b をすべてこなせば解けるようになるのではないでしょうか。b 問題も目指せると思います。
300 点
300 点の問題から難しくなってきて、言語の知識だけではなくソートなどのアルゴリズムを考える力を求められます。この問題が解けるようになると、純粋なプログラミングスキルはプロとして通用するレベルだと思います。
400 点
400 点の問題は、競技プログラミング対策が必要になります。また組み合わせなどの数学の知識も必要となってきます。このレベルのアルゴリズムの知識は、実は職業プログラマはあまり使用しません。なのでこのレベルの問題は、意外とプロのプログラマより学生のほうがさらっと解けたりします。
500 点以上
500 点以上の問題は、400 点の問題と同じ傾向です。競技プログラミング向けのプログラミングや数学の学習を続けていれば解けるようになります。ビギナーズコンテストっていう割に、このレベルは普通に難しいです。100 点~ 600 点の問題を解ける 6 完達成者は上位 7%くらいです。ビギナーじゃない人も歯ごたえのある ABC です!
解けなかったときは
コンテストが終了すると、解説が掲載されます。しばらく悩んでわからなかったら、素直に読んじゃいましょう。
PDF はめちゃくちゃシンプルに考え方が記載されています。youtube があるなら、そちらを参照したほうがわかりやすいと思います。 また問題の番号で検索すると解説しているブログがひっかかります。 ABC 168 の a 問題ならabc168_a で検索します。