AtCoder は、AtCoder株式会社が運営している競技プログラミングサイトです。このプログでは、プログラミング言語に慣れるため、もしくはアルゴリズムを学ぶために、AtCoder のコンテストの問題を紹介していました。
今回は、AtCodet について紹介します。また、開催回数が多い、ABC(AtCoder Beginner Contest)についても紹介します。
ABCのフォーマットが変わったため、2023年9月10日に更新しました。
競技プログラミングとは
そもそも「競技プログラミング」とはなんでしょうか。典型的には、以下の手順で進むイベントです。
- 参加者に、プログラミング言語を使って解くことができる課題が与えられる。
- 参加者は、課題を解くことができるプログラムをサイトに提出する。
- 提出されたプログラムの正しさをサイトが採点する。
- 解いた課題の数、難易度などから、参加者の順位を決定する。
多くの場合、提出されたプログラムに入力を与えて、想定の出力をするか判定することよって、自動採点しています。
AtCoder は、国内で運営されているサイトとして、最大の競技プログラミングサイトです。
このブログでは、以下の理由で AtCoder を活用しています。
- 取り組みやすい難易度の問題が含まれるコンテストが、週に1回程度開催されている。
- 参加者が多く、情報が多い。
- やはりプログラミングは楽しい!(これは AtCoder に限りませんが)
常設中のコンテスト
サイトにアカウントを登録すると、いつでも参加できる「常設中のコンテスト」に参加できます。コンテストのホームページからアクセスできます。
初心者向けのコンテストを紹介します。
Practice contest
このコンテストを最初に試すことになると思います。以下にアクセスしてみてください。
Practice contest 問題A – Welcome to AtCoder
整数と文字列を入力して、簡単な演算の結果と文字列を出力する問題です。
C++ の解答例です。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b >> c;
string s;
cin >> s;
cout << a + b + c << " " << s << endl;
return 0;
}
Python の解答例です。
"""AtCoder practice contest A"""
a = int(input())
b, c = map(int, input().split())
s = input()
print(a + b + c, s)
この問題の下にある欄から、プログラムを提出することができます。提出すると、サイトが自動採点してくれます。「提出結果」→「自分の提出」で結果を確認することができます。
何回でも提出することができます。
C++入門(APG4b)
競技プログラミングでは、実行速度とライブラリが充実していることから、C++ が使われる場合が多いです。
AtCoder では、以下のC++入門を常設コンテストとして公開しています。
C++入門 AtCoder Programming Guide for beginners (APG4b)
一般の C++ 入門コースと違い、AtCoder での利用を意識しています。このため、AtCoder を試したい人には、ちょうどよい C++ 入門になっています。AtCoder に特化している内容についても丁寧に説明されているため、一般の C++ 入門として使うこともできます。
AtCoder Beginners Selection
初心者向け問題集が以下として公開されています。
Practice contest の問題Aと初心者向けの10問から成ります。
AtCoder は、多くのプログラミング言語で解答を提出することができます。新しいプログラミング言語を学んだ場合、この問題集を解いてみるのが良いと思います。
一般のコンテスト
AtCoder では、主に以下のコンテストが開催されています。上に記載したコンテストほど、開催回数が多く、やさしい課題が含まれています。
- ABC(AtCoder Beginner Contest)
- ARC(AtCoder Regular Contest)
- AGC(AtCoder Grand Contest)
ABC の紹介
取り組みやすい難易度の ABC について、紹介します。
ABC は、週1回程度の頻度で開催されています。毎週土曜日の 21:00-22:40 の100分間で開催される場合が多いです。
このブログでは、ABC の問題を中心に紹介していきます。
注意ですが、“Beginner” とありますが、非常に難しい問題も含まれています。また、世界的に著名な競技プログラマーが参加している場合もあります。
その一方、ABCのA問題、B問題は、プログラミング初心者にも手が届く難易度であり、この難易度の問題が含まれていることが、AtCoder の良さであると考えています。
ABC の歴史
第1回~第125回
ABC は開催された当初は、A問題からD問題までの4題でした。第1回(2013年10月12日開催)から、第125回(2019年4月27日開催)までが、このフォーマットでした。ABC の難易度は、2016年以降に開催された第42回から安定したと考えられているようです。
第126回~第211回
第126回(2019年5月19日開催)から、E問題とF問題が加わり、6題提出のフォーマットとなりました。上限の対象Rateが1199から1999に変更されました。このフォーマットは、第211回(2021年7月24日)まで使われました。
第212回~第318回
第212回(2021年7月31日)から、G問題とEx問題(またはH問題)が加わり、8題提出の問題となりました。
第319回~現在 (2023年9月10日更新)
第319回(2023年9月9日)から、G問題までの7題提出のフォーマットに変更されました。理由については、ABC319で以下のように告知されました。
※今まで ABC で出題予定の高難度の問題がたまっていたため 8 問制にしていましたが、在庫が消化できてきたため今回から 7 問制となります。 F 問題までの難易度は今までと同等となる予定です。G 問題の難易度は幅広く、今までの簡単な G 問題に対応するときから今までの難しい Ex 問題に対応するときもあります。詳しくは各回の配点をご確認ください。
https://atcoder.jp/posts/1100
ABC は、前述のように週に1回開催されています。参加しやすいのですが、難しい問題が含まれています。多くの人にとってすべて解くのは時間的にも非常に難しいです。
最後に
AtCoder と ABC について紹介しました。
競技プログラミングは、競技性があるため面白くもあるのですが、世界トップレベルの実力を持つプログラマーとの差も可視化されます。コンテストの成績は、自分の成長を測るために使い、あまり上の方の成績を見ないことがよいと考えています。
このブログでは、しばらく ABC の難易度が低い問題を紹介していきます。