【初心者向け】AtCoder Beginner Contest の 取り組み方

##  はじめに
この記事は@drkenさん主催,「競技プログラミングを始めたばかりの人に伝えたいことアドベントカレンダー」3日目の記事です.

##  挨拶
こんにちは.こんばんは.<b>Rute</b>です.(<a href = "https://twitter.com/rute_not_route">Twitter @rute_not_route</a>)
私は現在大学3年生で, 競技プログラミングのコンテストに初めて参加してから2年8ヶ月の期間が経過しています.
AtCoderコンテストの参加回数は2021年12月3日現在**105回**です.

本記事では, これからAtCoder Beginner Contest(以降ABCと略します)に参加される皆さんに,**ABCの取り組み方**を説明したいと思います.


## 目次

|章|タイトル|
|---|---|
|1|<a href = "https://qiita.com/rute_not_route/private/d1ae32a80d1c3a50d017#%E7%AC%AC1%E7%AB%A0-%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A8%E3%81%AF">はじめに:競技プログラミングとは</a>|
|2|<a href = "https://qiita.com/rute_not_route/private/d1ae32a80d1c3a50d017#%E7%AC%AC1%E7%AB%A0-%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%A8%E3%81%AF">ABCへの参加方法:アカウント作成から競技開始前まで</a>|
|3|<a href = "https://qiita.com/rute_not_route/private/d1ae32a80d1c3a50d017#%E7%AC%AC3%E7%AB%A0-abc%E3%81%AB%E6%8C%91%E6%88%A6%E7%AB%B6%E6%8A%80%E9%96%8B%E5%A7%8B%E3%81%8B%E3%82%89%E7%AB%B6%E6%8A%80%E7%B5%82%E4%BA%86%E3%81%BE%E3%81%A7">ABCに挑戦！:競技開始から競技終了前まで</a>|
|4|<a href = "https://qiita.com/rute_not_route/private/d1ae32a80d1c3a50d017#%E7%AC%AC3%E7%AB%A0-abc%E3%81%AB%E6%8C%91%E6%88%A6%E7%AB%B6%E6%8A%80%E9%96%8B%E5%A7%8B%E3%81%8B%E3%82%89%E7%AB%B6%E6%8A%80%E7%B5%82%E4%BA%86%E3%81%BE%E3%81%A7">ABC終了後に取り組むこと:競技終了後</a>|
|5|<a href = "https://qiita.com/rute_not_route/private/d1ae32a80d1c3a50d017#%E7%AC%AC5%E7%AB%A0-abc%E3%81%AE%E5%AF%BE%E7%AD%96%E6%96%B9%E6%B3%95%E5%88%9D%E5%BF%83%E8%80%85%E5%90%91%E3%81%91">ABCの対策方法(初心者向け)</a>|
|6|<a href = "https://qiita.com/rute_not_route/private/d1ae32a80d1c3a50d017#%E7%AC%AC6%E7%AB%A0-%E3%81%8A%E3%82%8F%E3%82%8A%E3%81%AB%E7%AB%B6%E3%83%97%E3%83%AD%E4%BA%BA%E5%8F%A3%E3%82%92%E5%A2%97%E3%82%84%E3%81%97%E3%81%9F%E3%81%84">おわりに:競プロ人口を増やしたい</a>|

## 第1章 はじめに:競技プログラミングとは
この章では,**競技プログラミング**というものを知らない方向けに,**競技プログラミング**, それから**ABC**について説明します.

### 1.1 競技プログラミングとは
競技プログラミングとは,
**参加者全員に同一の課題が出題され, より早く与えられた要求を満足するプログラムを正確に記述することを競う競技です.**
(Wikpediaの文章より)
文章だけだと分かりづらい, という方もいると思います.
イラストで表すと,こんな感じです.
![初心者向け①.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/00ec202c-f6b4-54b1-8107-309e04af3de2.png)
たとえば,以下のような問題が出題されます.
>2つの整数$A,B$が与えられます. $A + B$の計算結果を出力して下さい.

例えばPython3という言語では, 以下のソースコードを記述することによりこの問題を解くことが出来ます.
<details><summary>ソースコード例</summary>
```python
A,B = map(int,input().split())
print(A+B)
```
</details>
### 1.2 ABCとは
ABCとは,毎週土曜日または日曜日に開催される<b>競技プログラミング</b>のコンテストで,<b>初心者から上級者まで幅広い実力の人</b>がコンテストに参加します.
<font color="Gray">(2021年11月時点で,<b>6500人</b>くらいの方が同時にコンテストに参加しています.)</font>

## 第2章 ABCへの参加方法:アカウント作成から競技開始前まで
この章では,主に**アカウント作成**から**競技開始前**までの部分を説明します.
この章を読むことにより,ABC初参加への準備が整うようになります.

ABCに初めて参加する際に, 3つ行って頂きたいことがあります！

- AtCoderアカウントの作成
- ABC の参加登録
- Twitter アカウントの保有

### 2.1 AtCoderアカウントの作成
まずは,<b>AtCoderアカウントの作成</b>を行いましょう.
まずは,<a href = "https://atcoder.jp/">AtCoderの公式サイト</a>の<b>参加登録</b>のボタンを押してみましょう.
すると,以下の様な画面が表示されます.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/172c7ef8-1e26-ccf2-0773-26bb607b9d20.png)
ここに,必要事項を記入して<b>新規登録</b>のボタンを押します.

::: note warn
ユーザ名, メールアドレス, パスワード, 国と地域 は<b>必須入力項目</b>です.
また, <b>ユーザ名</b>は登録すると基本的には<b><font color="red">1度しか変更が出来ない</b></font>ので考えてから登録して下さい.
:::

これで,**AtCoderアカウント**の作成が完了しました.
### 2.2 ABC の参加登録
AtCoderへの登録が終わったら,**ABCが開催されるページ**に移動しましょう.
AtCoderのコンテスト情報ページは主に**2種類**あるので,両方の画面でどこをクリックすればいいのかを画像で説明します.

<details><summary>参加登録の画面(2種類)</summary>
![予定添付1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/e8e4a618-e1cc-20f9-c66f-243e310aede7.png)
![予定添付2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/611b4bb3-8d09-bfe7-c154-002f15054f0a.png)
</details>

すると, このような画面が表示されると思います.
次に, 青枠白抜き文字で表示されている**参加登録**ボタンを押しましょう.
![初心者向け②_参加登録画面.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/0f68d998-0167-b5e1-9b27-d5e64b9787df.png)
この画面が表示されれば, **参加登録が完了した**ということになります.
![初心者向け③_参加登録完了.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/5987f49e-fcd7-096c-9648-fe3a7cf23d83.png)
#### Rated参加ボタン, Unrated参加ボタンについて
<font color = "red">12/3以降に開催されるABCを含むコンテストページでは, これに加え<b>「Rated参加ボタン」「Unrated参加ボタン」</b>が追加されます.</font>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/5f2dafec-cf75-1007-d8db-69cd34eee3de.png)
<b>Rated参加ボタン</b>は, クリックすることによりこれまでのABCと同様Rated(レーティング変動がある)による参加となります.
<b>Unrated参加ボタン</b>は, クリックすることによりUnrated(レーティング変動がない)による参加となります.
睡眠不足や体調不良により<b>本来のパフォーマンスを発揮できない</b>場合は, こちらを選ぶようにしましょう.

::: note info
なお,参加登録をした後にUnratedからRated, またはRatedからUnrated に変更したい場合は <b>参加登録をし直してからもう一度該当するボタンをクリックするようにしましょう</b>. 
<font color="red">変更はコンテスト開始後<b>行うことができない</b>ので注意してください.</font>
また, コンテスト開始5分後までに<b>「Rated参加登録ボタン」</b>をクリックしなければ, <font color="red">自動的に<b>Unrated</b>になること</font>にも気をつけて下さい.
:::

また,この変更に伴って注意して欲しい点があります.

:::note warn
Rated参加ボタンをクリックした場合, 
<b>・ソースコードの提出をコンテスト時間中に行わなかった場合</b>
<b>・コンテスト期間中に問題を1問も閲覧しなかった場合</b>
でもRatedになる点に注意して下さい.

例えば, 当日急な用事が入ってコンテストに参加することが出来なかった場合, これまでは<b>Unrated</b>扱いでしたが, 
今回のABCから<b>0問正解</b>と見なされその順位帯の成績となってしまいます.

:::

### 2.3 Twitter アカウントの作成
<font color="right-blue"><b>Twitter</b></font>は, 競技プログラミングに取り組まれている方の多くが利用しているSNSです.
<b>Twitter上</b>では, **分からない問題に関しての質疑応答,同じ趣味同士の方で趣味に関する情報の共有, 雑談など**が行われています.

また, コンテスト開始前には**コンテストへの意気込み**, コンテスト終了後には**コンテストの問題の解法**などが多くツイートされます.

ぜひ,**Twitterアカウントを作成することをお勧めします！**
Twitterアカウントの作成方法は, 各自で調べて下さい.
そして, なるべく多くの競技プログラマーの方のTwitterをフォローするようにしましょう.

ちなみに, 本文章の主題から一度外れますが私のTwiterの紹介をします.
基本的に私のTwitterでは, <b>競技プログラミングのコンテストに関する事の他に, 趣味の音楽ゲームや日常などについて</b>呟いています.
もしよろしければ, 再度掲示しますがTwitterのフォローもよろしくお願いします.
<a href = "https://twitter.com/rute_not_route">@rute_not_route(Twitter)</a>

## 第3章 ABCに挑戦！:競技開始から競技終了まで
この章では, 主に**競技開始**から**競技終了**までの部分を説明します.
この章を読むことにより,**コンテスト中の問題への取り組み方**を知ることができます.

### 3.1 問題文の確認

コンテストが開始されると, 以下の様な画面が表示されます.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/ada56422-88f4-ba68-3197-1927cac59261.png)


8問の問題が表示されると思いますが, まずは1番最初の問題である, **A問題**のページを開いてみましょう.
<a href = "https://atcoder.jp/contests/abc219/tasks/abc219_a">A問題のページ</a>
各問題は**問題文**, **制約**, **入力**, **出力**, **入力例と出力例**の5つのセクションに分かれます.

それぞれについて説明します.

**問題文**

:::note info
<b>解決したい問題を説明している文章</b>です.
ストーリー性があるものや, 端的に説明しているものなど, 文章の構成は様々です.
:::

**制約**

:::note info
入力で与えられる<b>入力の値の制約</b>などが表示されます.
:::

**入力**

:::note info
<b>入力の形式</b>が表示されます.
:::

**出力**

:::note info
<b>出力するべき値</b>について表示されます.
:::

**入力例と出力例**

:::note info
<b>入力とそれに対する出力</b>が表示されます.
:::

### 3.2 提出
さて, 問題に関して解き方の方針が固まったら, <b>ソースコード</b>を実行環境などで記述します.
実行環境がPCなどにインストールされていない場合でも大丈夫です.
 <b>コードテスト</b>のページに直接プログラムのソースコードを記述し, 入力欄に入力を入れて実行することにより出力を確認することが可能です.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/a0b9dcb7-7d51-d08d-7408-d223a3bd6b9f.png)


入力例に対応した出力が行われることが確認出来れば, いよいよ**提出**の段階に移ります.
コンテストページの**提出**ページに移動します.

![初心者向け④_編集前.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/f4598ed2-7652-cc57-be6b-e65277a96931.png)

提出ページは, **「言語」「ソースコードの記入欄」「提出ボタン」**によって構成されています.
**「言語」**を選択してソースコードを記入し, **提出**ボタンを押しましょう.

提出が完了すると, このような画面になります.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/470175d1-2bb2-f0c8-9a28-c72185455695.png)
(実際は``X``の部分に数字が入ります)
結果の部分に<font color="green">**AC**</font>と表示されていれば, **正解**の判定になります.
提出結果の種類の一覧に関してはここでは説明しませんが,
**AC**以外の表示がされていると, 基本的には**不正解**の判定となります.(**WJ**と表示されているときは正誤判定中です)

**正解**の判定が表示されれば, この問題に関する作業は終了です.
**問題**ページに戻って**B問題**以降の問題を解きましょう.

### 3.3 順位の決定方法
**「競技」プログラミング**ということで, 当然順位付けが行われます.
順位付けの方法は以下の順序によって行われます.

1. **正解した問題の点数の総和**(A問題,B問題2問なら300点)
2. **最後に正解した時間 + （正解するまでに提出した）不正解の数*5分の時間**<br><font color="gray">(A問題を10分で正解し,B問題で1回不正解の判定がされた後に20分で正解すれば,時間は**25分**となります.)</font>

ABCを含む,競技プログラミングのコンテストでは基本的に「難易度が易しい順から」問題が並んでいることが多いです.
そのため, **解いた問題数に比例して順位が上がっていくこと**が多いです.

### 3.4 コンテスト中の注意
ABCコンテスト中に行ってはいけない行為があります.
それは以下の通りです.

:::note warn
1. SNS上に「順位表から分かる」情報以外を投稿してはならない
2. 2人以上で結託して解答してはならない
:::

1. について, 投稿しても良い情報は以下の通りです.

::: note info
その時点での各問題に対するAC数
First ACした人
「全完した」などの発言
:::

これらの情報は, <b>順位表から分かる情報</b>であり,共有は問題ないです.
逆に, 投稿してはいけない情報は以下の通りです.

::: note alert
問題の解法に関する情報
<b>WAの回数, TLEの回数, テストケース数</b>など
:::

これらの情報は, 共有された場合<b>SNSを見た方のみが有利になってしまい, 競技性が成立しない, という状況になる</b>ため絶対に共有しないで下さい.

## 第4章 ABC終了後に取り組むこと:競技終了から
この章では, 主に**競技終了**からの部分を説明します.
この章を読むことにより, **ABCの競技終了後に行うべきこと**がわかります.
### 4.1 公式解説ページの確認
競技終了後は, **解説**が公開されます.
コンテストページを更新し, **解説** ページを確認しましょう.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/2a2f70bf-57c9-195c-608d-a2cb6de04611.png)
<font color="gray">(コンテスト終了直後は**コンテスト全体の解説**ページは表示されず, **問題毎**の公式解説ページが表示されます)</font>
各問題の公式解説ページには, **問題に対する解説とソースコード**が記載されています.

AtCoderでは, C++の学習コンテンツが公開されているため, 基本的にはソースコードは**C++**で記述されているものが多いです. **Java, C#, Python**など**C++**以外の言語で参加されている方は, 問題によってはソースコードが記載されていない可能性があります.

この場合は**「第三者のソースコード」を見て理解する**, という方法もあります.
これは**提出**のページから「すべての提出」ページを選択することにより閲覧することが可能です.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/5b5afc4c-52b2-4c74-93e4-5d5630948877.png)
<font color="gray">(問題名, 言語, 判定, ユーザー名で絞って検索することも可能です) </font>

解説を読んで, 解けなかった問題に対しては**どのように考察をすれば良かったのか**, **どのような実装をすれば良かったのか** を確認しましょう.

逆に, 解けた問題に対しては **考察の方法が解説と同じだったか**を確認しましょう. 
もしかすると, **考えた方針と解説の方針が異なる可能性があります.** その場合は正解した問題でも もう一度実装するようにしましょう.
### 4.2 SNSやYouTube等の解説を利用
また, SNS等では ユーザー解説がツイートされることがあります.
はてなブログやQiita記事など, ブログ記事にして公開される場合もあります.
SNSでは気軽に**問題に関する質問**が出来るので, もし解説を読んでも分からない場合は**ツイートをされた方にリプライをして説明を求めてみましょう.**

また,YouTubeにて解説動画を上げている方もいらっしゃいます.

これは宣伝にはなりますが, 私自身毎回のABCコンテスト終了後(22:45), YouTube上にて**「振り返り放送」**と題してA問題からC問題までの問題を解説しています.
基本的には**Python3**でコーディングを行っています.

**初心者の皆さんに分かりやすい解説**を心がけていますので, よろしければチャンネル登録をして配信をお待ち下さい.
<a href = "https://www.youtube.com/channel/UCvB4r-9OCn84AohIsnvLYhA"><font color="Blue">RuteチャンネルのURL</font></a>
### 4.3 レーティングについて
コンテスト終了後しばらく時間が経過すると<b>レーティング</b>というものが付与されます.これは, **毎回のコンテストの成績によって変動します.** 
<font color="gray">(参加回数が10回未満の場合,レーティングの変動がパフォーマンスよりも小さくなることもあります)</font>
<b>レーティング</b>には色がつけられており,400区切りで色が変わっています.
![初心者向け⑤_色の関係.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/4c607693-956e-f2f5-38a7-26dcd395d962.png)

初心者の皆さんは, まず<font color="Brown">「茶色(Brown)」レーティング</font>に到達することを目指しましょう.
茶色レーティングは,**「一般的には十分高いレベルである」**と, AtCoder代表取締役の高橋 直大さんも<a href = "https://chokudai.hatenablog.com/entry/2019/02/11/155904">自身のブログ</a>にて説明しています.

## 第5章 ABCの対策方法(初心者向け)
この章では, 主に競技プログラミング初心者の方々向けに**ABCの対策方法**について説明します.
### 5.1 パフォーマンス値について

次の画像で示すデータは, ABC212からABC225までの14回のコンテストにおいての**パフォーマンス値と完数の一覧**です.

**パフォーマンス値**, **完数**の定義は以下の通りです.

<dl>
  <dt>パフォーマンス値</dt>
  <dd>コンテスト毎に計算されるレーティングの値.<br>
前述した<b>レーティング</b>を計算するために必要な値です.<br>ただし, <b>パフォーマンス</b> = <b>レーティング</b>ではありません.</dd>
  <dt>完数</dt>
  <dd>以下の計算式によって計算しました.<br>
$(解いた問題の数) - min(1,(正答時間[秒]) / 6000)$<br>
例えば, 2問を20分で解いた場合完数は<font color="red"><b>1.80完</font></b>となります.</dd>
</dl>
![初心者向け⑥_perfと完数1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/469e2a7d-f5a6-dfb9-3225-8f369864c418.png)
平均的にはPerformance 800で**3完25分**くらい, 
Performance 400で**3完80分**くらいということになりました.

茶パフォーマンス以上を取得するには, 平均的には3完以上の成績が必要なので, ここでは**3完をするための対策として「A問題からC問題までの解き方」を説明します.**

### 5.2.1 A問題の解き方
ABCのA問題では, 基本的にはこの分野の問題が問われます.

|算数問題|条件分岐|簡単な文字列処理|
|--|--|--|
特に**条件分岐**は, A問題の中でもよく問われています.
<a href = "https://atcoder.jp/contests/abc215/tasks/abc215_a">ABC215 A問題「Your First Judge」</a>
<a href = "https://atcoder.jp/contests/abc216/tasks/abc216_a">ABC216 A問題「Signed Difficulty」</a>
<a href = "https://atcoder.jp/contests/abc223/tasks/abc223_a">ABC223 A問題「Exact Price」</a>

このような問題では, 基本的には
**「条件にあてはまるなら``Yes``, 条件にあてはまらないなら``No``を出力しなさい」** 
という形式の出力が多いです

Python,C++だと, このように条件分岐を記述します.覚えておいてください.
<details><summary>条件分岐の書き方(Python)</summary><div>

```python
if 条件:
  print("Yes")
else:
  print("No")
```
</div></details>
<details><summary>条件分岐の書き方(C++)</summary><div>

```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
  if (条件){
    cout << "Yes" << endl;
  }else{
    cout << "No" << endl;
  }
  return 0;
}
```
</div></details>

### 5.2.2 B問題の解き方
ABCのB問題では, 基本的にはこの分野の問題が問われます.

|for文によるループ|複雑な文字列処理|全探索|
|--|--|--|
|<b>数学問題</b>|<b>配列</b>|

特に**for文によるループ**に関する問題が多く出題されています.
<a href = "https://atcoder.jp/contests/abc213/tasks/abc213_b">ABC213 B問題「Booby Prize」</a>
<a href = "https://atcoder.jp/contests/abc222/tasks/abc222_b">ABC222 B問題「Failing Grade」</a>
<a href = "https://atcoder.jp/contests/abc229/tasks/abc229_b">ABC229 B問題「Hard Calculation」</a>

Python,C++だと, このようにfor文を記述します.覚えておいてください.
<details><summary>for文の書き方(Python)</summary><div>

```python
for i in range(回数):
  実行したい処理
```
</div></details>
<details><summary>for文の書き方(C++)</summary><div>

```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
  for (int i = 0; i < N; i++){
    実行したい処理;
  }
  return 0;
}
```
</div></details>

基本的には**for文**を使った問題や**全探索**の問題が問われますが, たまに数学関連の問題が出題されることもあります. <b>少しギョッとするかもしれません</b>が, 問題文をよく読んで理解してから考察を考えてみましょう.
### 5.2.3 C問題の解き方
ABCのC問題では, 基本的にはこの分野の問題が問われます.

|全探索|Bit全探索|順列全探索|
|---|---|---|
|<b>深さ優先探索</b>|<b>幅優先探索</b>|<b>工夫した全探索</b>|
|<b>二次元ソート</b>|<b>UnionFind</b>|<b>動的計画法</b>|

特に,**工夫した全探索**など, 計算量を落とす問題は**頻出**ですので,
覚えておきましょう.ここで,**計算量**という概念についても説明します.
<b>計算量</b>
一般的なコンピューターでは, 1秒間に**$10^{8}$(1億)**回程度の計算を行うことができます.
競技プログラミングの問題には, **「実行時間制限」**が設定されています.
たいていの問題は「実行時間制限」が**2秒**で設定されています.
例えば, 入力のデータ数**$N$**の制約が$ 1 \leq N \leq 2×10^{5}$などの場合, $N$の2乗に比例する計算量の処理を行うプログラムを記述すると, **TLE(実行時間制限超過)**となり不正解となります.
先ほどのような制約で, $N$の2乗に比例する計算量の処理を問題を解いている中で思いついた場合, **「計算量を落とすことができないか」**と一度考えるようにしましょう.

これまで**A問題からC問題**までの解き方を説明しましたが, 茶～緑のパフォーマンスで特に重要なのはB問題を解いた後の**C問題**の解答速度です.
**C問題**はB問題までと比べ難易度が上がることが多いです.<b>この問題の解答速度によってパフォーマンスが変わることが多い</b>ので, なるべく早く解くことができるようにしましょう.

### 5.3 「早解き」を意識する.
過去のABCコンテストでは,**ある問題とある問題の間で難易度の差があった際, 同じ点数の間でも取得出来るパフォーマンスの範囲が大きかった** ということがありました.
以下は,<b>「過去のあるABCの問題毎の難易度(Difficulty)」と, 「パフォーマンスと完数の関係」をまとめた表です.
![初心者向け⑦_ABC214Data.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/3df3315d-552b-4630-c62f-a5247f8fcf6b.png)
![初心者向け⑧_ABC224Data.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/acbfb148-871a-8656-d200-5e1298f46f48.png)

ここで着目して欲しいのは朱色で色塗りした**完数**の部分です.
ABC214,ABC224の両方のデータを見ると,3完内のパフォーマンスの範囲が広いことが分かります. 
これは, C問題とD問題の間にDifficultyの差があるために発生したことです.
ABCの問題セットは,基本的には
**灰-灰-灰上位-(緑下位or茶上位)-水-青-(黄or橙)-赤**
というDifficultyになるように問題の難易度が調整されていますが,希にこのような**「問題の難易度の差が存在する」**問題セットになる場合があります.
このような問題セットの場合は, **早解き**をすることにより普段取得しているパフォーマンス値よりも高いパフォーマンス値を取得出来る可能性があります.

では, どのようにして**早解き**力を身につけたらよいか, ということですが, 個人的なオススメとしてはズバリ
<font color="red">過去のコンテストの<b>「バーチャル参加」</b>を行うことです.</font>
過去のAtCoderコンテストのコンテストページには, <b>「バーチャル参加」</b>というボタンが存在します.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/0570e8d9-cc17-4caf-eb2c-878b58952672.png)
このボタンをクリックすると, 以下の様な画面に移動します.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/a9e0bd5f-f6e6-4f1c-a5f2-74d4497934e9.png)
<b>開始時刻</b>を設定することにより, 開始時刻から100分間 コンテストと同様の時間で問題を解くことが出来ます.
また, 実際の順位表と比較して, コンテスト本番ではどのくらいの順位だったか を調べることが出来ます.
最初のうちは, <b>100分間参加して コンテスト同様に参加すること</b>をおすすめします. 時間がない, という方は<b>A問題からC問題までを10分で解くこと</b>に挑戦してみましょう.
これは正直な所初心者の方に対してはかなり厳しいことを言ってしまうことになりますが, 先ほども言った通り<b>茶色以上のパフォーマンス値を取得するためには平均的には3完が必須</b>です.また, 難易度の差があることにより3完でも水色のパフォーマンス値を取得出来るので, バーチャル参加という機能を通じて楽に**早解き**の練習をしてもらいたいと思います.

## 第6章 おわりに:競プロ人口を増やしたい
この章が最後になります. この章では, 主に<b>これから競技プログラミングのコンテストに参加される方</b>に私が伝えたいことを説明します.
さて, 「プログラミング」教育の必修化については, 既にニュースなどでも報道されていることもあり, 知っている方も多いと思います.
2020年からは**小学校**, 2021年からは**中学校**で「プログラミング」教育が必修化されました. 来年2022年からは**高等学校**で「プログラミング」教育が必修化される予定です.
また,2025年1月に実施される予定の, 大学入試共通テストから**「情報」**という科目が導入されます.
この科目では, **主にプログラミングやデータサイエンスに必要な統計処理, 情報リテラシーの知識**が試され, IT人材の拡大に繋げるねらいがあります.
![初心者向け⑨_プログラミング教育について.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/5f70ac17-46d1-c377-8de2-436799d1732a.png)
本記事の読者層が高校生・中学生・小学生のみに限らないのは十分承知です.
ですが, <b>「プログラミング的思考力」や「アルゴリズムの設計力」</b>は現代社会(IT分野)において必要であると考えています.

「プログラミング的思考力」や「アルゴリズムの設計力」を鍛える教材として, 個人的には<b>「AtCoder」を含む「競技プログラミング」を勧めたいです.</b>
「AtCoder」の問題には基本的な入出力の問題から高度なデータ構造を扱う問題等, 様々な難易度の問題があり, これらの問題を解くことによって<b>プログラミング的思考力などを向上させることが出来ると思います.</b>

現在, AtCoderコンテストに参加されている日本人の人数は**4000人**程度です.この人数は, 最も参加者数が多かった1年半前のコンテストの参加人数の**半分以下**になっており, 競技人口の衰退も否めない状況になっています.

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ABC 229 日本人参加者数<br><br>register 3923 (-200), submit (-169) <a href="https://t.co/n4XVZcrmMg">pic.twitter.com/n4XVZcrmMg</a></p>&mdash; じゅぴろ⚖ (@jupijupi111) <a href="https://twitter.com/jupijupi111/status/1464593113922490371?ref_src=twsrc%5Etfw">November 27, 2021</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

小学生・中学生・高校生の皆さんはこの記事を見て「プログラミング的思考力」向上などの目的で「AtCoderコンテスト」に参加してほしいと思います.

大学生の方で, もし<b>"アルゴリズムに興味がある, プログラミングに興味がある"</b>という方も同様に参加してほしいと思います.
AtCoderでは時々**企業協賛コンテスト**が開催され, 好成績を収めることにより, 賞金がもらえるコンテストも存在します.
また, **<a href = "https://jobs.atcoder.jp/">AtCoder Jobs</a>**という, AtCoderのレーティングによって就職活動を支援するサイトもありますので<b>現23卒・24卒</b>等の方はよろしければそちらを見て就職を検討して頂きたい と思っています.

社会人の方も, **「プログラミング能力を向上したい」「実務のプログラミングを利用して競技に参加したい」等と思っている方**も同様に参加してほしいと思っています.

### オススメコンテンツ「アルゴ式」
<b>アルゴ式</b>とは, 「競技プログラミング」の形式で問題を解くことにより情報科学を学習できるサービスです.
<a href = "https://algo-method.com/">アルゴ式の公式サイトはこちら</a>
![1500x500.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/530417/4c245dbb-416d-44d4-1c35-4fe18601e768.jpeg)
このサービスでは,<b>教科書・および付随する練習問題</b>によって情報科学を学習することができます.
例えば, 「全探索」のコンテンツでは<b>配列の全探索から二重ループの全探索まで,「競技プログラミング」で主に出題される問題と同様の問題</b>を解くことが出来ます.
また, 従来の「競技プログラミング」とは異なり, <b>「プログラミングで学ぶ数学」</b>と称して, 様々な数学の概念を「競技プログラミング」と同様の形式で学習できるコンテンツも存在します.

アルゴ式は<b>今年8月1日に公開されたばかりの新しいコンテンツ</b>です.　競技プログラミングを始められる方は, ぜひこちらのサイトに登録してみて下さい. ABCの問題を解くときの参考になるかもしれません. 

### まとめ
最後になりますが, **本記事をここまで読んで頂き, ありがとうございました.** 
3日目にしては文章量がある記事だったと思いますが, **「競技プログラミングを始めたばかりの方に伝えたいこととしては, やはり『ABCの参加方法』や『ABCの対策方法』だろう」**と思い当記事を作成致しました.
今後のAdvent Calendarでも**様々なテーマで競技プログラミングの記事が公開されると思います**ので, 何卒よろしくお願いします.

記事に関して質問や感想などがありましたらコメントにて投稿をお願いします.