ぴよまるの雑多な技術所

持病で休職中のエンジニアです。ReactとPythonで自分のサービス作り、業務系を普段はやりたくwindowsをいじっています。ORの研究開始。

競技プログラミングデビューした

競プロデビューしたのでまとめます。

競技プログラミングとレーティングとは

与えられた問題を早く正確にとくあれです。よくいわれる「青色コーダー」とか「赤色コーダー」はAtCoder上のコンテストに参加するレートがつくので、それに付随した色をさします。 コンテストもレベルがあって、初心者はAtCoderのABCコンテストに出ます。週末の夜に開催していて、おそらく最初の数回は色がつきません(レーティングが上がるのゆっくりなので)。はじめたばかりで目指すのは茶色コーダー、水色までいけばアルゴリズムに関してはまあまあなスキルが担保されているような印象です。

参加方法

AtCoderに登録して、毎週日曜日の21時あたりにリアルタイムで参加します。

環境構築とかファイル管理まわり

私はPython使いですが、

pip3 install online-judge-tools
npm install -g atcoder-cli

こんな感じで、オンラインからテストケースとってきて良い感じに設定してくれるツールを使っています。自動でフォルダもコンテストごとに切られます。

//ログイン
acc login
//ログイン確かめる
acc session
//online-judge-toolsもログイン
oj login https://beta.atcoder.jp/

初期設定はこんな感じで、

//コンテストのディレクトリ作る
acc new abc101
//あとは対話式で解く問題を選択する

//テスト
oj t -c " python3 ./a.py" -d ./tests/

//submit
acc submit main.cpp

//次の問題
 acc add

こんな感じで使えます。 ファイル管理でいうと、今のところ、勉強する際は1つのリポジトリに全部のコンテストをフォルダごとにつっこんでいる感じです。書き捨てない方がいいです。あとで入出力まわりとか、やったことを見返すことがわりとある気がします。

問題の難しさについて

ABCコンテストしかわかりませんが、A問題は入出力できるかな程度、B問題はちょっとソーととかfor文での全探索が入った程度です。ここまでは言語に慣れているかどうかの話な気がします。 C問題からがちょっとアルゴリズムやデータ構造の知識がいるかなという難易度で、個人的には無勉強・無知識でとけるのはCまでかなという気がしました。Dはあんまりまだチャレンジしていません…。

勉強方法

有名な蟻本…は難易度が高いので、問題の種別を蟻本でざっとみたら、コンテストで過去問をとくみたいです。問題の種別というのは、例えばforループでとく全探索問題とか、DPとか、貪欲法とか、どんな考え方をどんな時に使うかという意味です。 サイトとしては

あたりが有名みたいです。tagsの方はカテゴリ別なので、何か1つのトピックの考え方を勉強して、過去問を集中的にとく…みたいな使い方ができそうです。

所感

競プロって楽しそうですよね。楽しいです。ただ勉強時間が沼なので、その辺の配分に悩んでいます。