Milky Coffee

競技プログラミングなど

【コンテスト開催記】milkcoffee & riano Contest 003 【MojaCoder】

MojaCoderにて、rianoさんと共同でコンテストを開催しました!

mojacoder.app

こんにちは、milkcoffeeです。

rianoさんと共同主催の「milkcoffee & riano Contest 003」を開催しました!

rianoさんと一緒にコンテストを開催するのはこれで3回目です。いつもお世話になっております!

今回はMRCでは初の試みとして、全体テスターをお願いしました。(nok0さんありがとうございました!)

今回のMRCは(自分の担当分は)いつもより難しいと思います。言いたいことが色々あるので書きます!

問題一覧

 

問題を作ったときの気持ち

A問題(300点):「Polygon Locus

A問題にしてはかなり難しかったと思います。

元々は「N回の移動で面積Mの多角形が作れますか?」の判定問題だったんですが、

riano さんに助言を頂いて、今の問題になりました!

答えは二分探索で求められます。意外と解かれなかったみたい・・・

f:id:milkcoffeen:20210928002448p:plain

↑この問題のために作った座標のサンプルです。ご自由にお使いください。



C問題(500点):「RGB Slimes」

個人的にはお気に入りの問題です!

この問題は設定から考えて、頑張ってみたら綺麗に解けたので出してみました。

自分の想定解は偶奇による場合分けだったんですが、テスターの nok0 さんにXOR不変を用いた解法を聞いて感動しました・・・というかXOR不変は上位勢にとってはかなり典型だったみたいですね・・・

典型要素があるということで最初の想定(600点)から点数を下げました。典型知らずに解けた人はすごいです。

F問題(800点):「XOR Operation」

自分の作問史上、一番難しい問題で、最高傑作だと思います。

最初は隣り合う要素にXORをすることで、数列Aと数列Bを一致させられるか?だったんですが、全く同じ問題がAtCoderにあることを発見してしまい・・・

そこから問題は最大化に変わり、より難しくなりました。

また、rianoさんに提案いただいて、操作を「隣り合う要素へのXOR」から「右隣へのXOR」に変えて、見た目をより難しくしました’(答えは同じになります。)

かなり時間をかけてじっくり作った問題です!なんとかAC者が出て良かった・・・

 

rianoさんの問題の感想

今回も難しかったです・・・

B問題(400点):「3-philia, 3-phobia」

シンプルな設定なんですが、ad-hoc な上にコーナーケースもあって難しいと思います。

ACするだけならそこそこのDIffですが、証明をするともっと難しいと思います!

ちなみに問題文はMRCが3回目ということでつけてくれたみたいです

D問題(600点):「Tetrahedron」

これも問題はシンプルで、行列累乗であることにも気づきやすいですが、そこから状態数を減らすのがかなり難しいと思いました。

偶置換、奇置換で考えるというのも数え上げの典型?らしいです。勉強になります。

E問題(700点):「River Crossing」

ad-hocすぎるしめちゃくちゃ難しいです・・・

実験をしていくとある程度は絞れるんですけど、正確に詰め切るのは難しいです。

 

結果

順位表

1位:potato167 さん 2位:Nachia さん 3位:merom686 さん おめでとうございます!

f:id:milkcoffeen:20210928234556p:plain

FA一覧

A: kiyoshi0205 さん(12:55)

B: tamato さん(10:47)

C: potato167 さん(15:40)

D: Nachia さん(17:10)

E: Nachia さん(92:08)

F: potato167 さん(102:29)

全体の感想・まとめ

今回はかなり難しいセットになりましたね!前半がちょっと難しくし過ぎたかもしれないです・・・

自分では今までで一番難しい問題が作れたので満足です!

作問も続けていきたいと思います!

開催記は以上になります。ありがとうございました!

 

【コンテスト開催記】Prime & Divisor Contest 001 【MojaCoder】

MojaCoder にて、mtsさんと共同でコンテストを開催しました!

mojacoder.app

 

こんにちは、milkcoffeeです。

前々からやろうと思っていた「素数・約数コンテスト」を

ついにMojaCoderで開催できました!

 

mts さんと共同でwriterをしました。また、MMNMMさんにtesterをしていただきました。本当にありがとうございます!

 

 

問題一覧

問題リンク集です。リンク先から解説も見れます。

★マークがついてる問題は自分が準備したもの、それ以外はmts さんが準備したものです。

A問題(200点):Odd Even Divisor

★B問題(300点):Div All

C問題(300点):LCM Knapsack

D問題(400点):Coprime Path

★E問題(400点):3 perf Number

★F問題(500点):Rich Primer

★G問題(500点):Pairwise Coprime Segments

H問題(600点):Prime Collector

企画段階

僕がTwitterで「何かのテーマに沿ったコンテストを開きたい、例えば素数約数関連のコンテストとか・・・」みたいなツイートをしたところ、mtsさんが「素数約数コン興味あります!」と声をかけてくださいました。これがキッカケです。

問題の構成なんですが、最初は6問にしようと思ってましたが、二人で問題案を出し合っていくうちに盛り上がってしまい(?)気づいたら10問くらいの問題案がそろっていたので、少し削って8問構成になりました。

お互いが持ってきた問題案をそのまま出すだけでなく、二人で少しずつ練りあって一つの問題を作り上げたのもかなり楽しい経験でした(今回のG問題が特にそれです)

コンテスト準備

8問の準備はめちゃくちゃ大変でした!!特にテストケース作成は力を入れて頑張りました。特に、mts さんのテストケースに対する視点が鋭くて、「こういうケースを入れたらこういう解法を落とせる」みたいなアドバイスをたくさんいただきました。

強いケースを増やしていくと、自分の問題が強くなっていくような気がしますね。

mts さんとお互いで準備した問題をテスターし合ってもう大丈夫!となったんですが、念のため(かなり直前になって)全体テスターを MMNMM さんにお願いすることになりました。直前のお願いになって申し訳なかったです・・・

もう大丈夫と思ってた問題も、テスターさんに鋭いご指摘をたくさんいただきました!流石暖色・・・

ちなみに直前に全問題を通して解いたところ、71分+3ペナでした。

各問題について

A問題(200点):Odd Even Divisor

約数コンのA問題って感じですよね。

直前に解いたときに1ペナを出しました。

これ、テスターさんによると O(N) で解けるらしいです・・・

★B問題(300点):Div All

公約数が何個ありますか、という問題。

塾講師のアルバイトで生徒に公約数教えてたら思いついた問題です。

普通にぱっと見難しいんじゃないかと思います。

これも1ペナを出しました。

C問題(300点):LCM Knapsack

ナップサック問題と約数問題の融合で、すごく教育的な問題だと思います。

テスターさんによると O(NW) で解けるらしい・・・?

D問題(400点):Coprime Path

シンプルだけど面白いです。

解けてみると単純なんですが、一瞬めっちゃ難しいことをしてしまいそうになります。

初見の時は普通に悩みました。

二乗の木DPでも解けるらしい?

★E問題(400点):3 perf Number

O(1) のギャグ問題ですが、実は一番の自信作です!!!

問題文にもありますが、完全数の定義を少し変えたらどうなるのか考えていたらこの問題が出来ました。

実験したら気づきやすいけど証明は難しいよな・・・という感じで、難易度推定が難しいです。もしかしたらいっぱい解かれるかも?

★F問題(500点):Rich Primer

この問題だけ唯一、このコンテストの企画が始まる前から出来ていました。

いつぞやのABCに「B-A≤72」みたいな制約があっておもしろ~と思い、その逆(逆?)の制約の問題を作りたくなったのが最初です。

制約の理由を考えると解きやすくなりそう

★G問題(500点):Pairwise Coprime Segments

準備したのは自分ですが、問題設定はほぼ mts さんが考えてくれました。

最初に僕が「鳩ノ巣原理を使った問題を作りたい」と言って、なんとかして鳩ノ巣原理を使わせる問題を作ろうと二人で考えて出来ました。

なんとか嘘解法を通されないようにテストケースを頑張って強くしました。mts さんがかなり強いテストケースを考えてくれました。WA出たらmtsさんを恨んでください。

実装が大変・・・

H問題(600点):Prime Collector

mts さんが考えてくれたボス問、これがどれくらい解かれるのか気になります。

これは是非自力で解いてみてほしいです!

素数約数と他のアルゴリズムを融合させるのが上手すぎます。

結果

f:id:milkcoffeen:20210827215845p:plain

MojaCoder の順位表が重くて見れなくなっていたので、mts さんがスプレッドシートに手打ちで順位表を作成してくださいました!

> PDC001_暫定順位表

合計参加者94人!全完達成者20人!

本当にありがとうございます!!! 

 

1位:sansen さん

2位:PCTp さん

3位:chocorusk さん

おめでとうございます!!

 

また、各問題のFAは以下のようになりました。おめでとうございます!

A: [01:28] ir_1st_vil さん

B: [01:00] tada72 さん

C: [05:20] emthrm さん

D: [10:24] sansen さん

E: [07:35] chocorusk さん

F: [16:50] sansen さん

G: [11:28] riano さん

H: [12:15] Nachia さん

 

コンテスト中の感想

開始30分で提出者数が80人近くいっていたのでビックリしました!

多くの参加本当にありがとうございます!

その後は参加者数が多すぎたためが順位表が見れなくなってしまい、実況できず・・・

MojaCoder に寄付をしてサーバー強めてもらいましょう!!

 

まとめ

8問コンテストの準備はやはりすごく大変でした。これを質を保って毎週開催してるAtCoderはやはり異常だと思います。

ただ、誰かと一緒に問題を考えたり、嘘解法を落とすテストケースを考えたり、当日順位表を見たりするのはすごく楽しいです。コンテストを開くのは最高です。

 

また、今回一緒にwriter をしてくださった mts さんの、色んな要素を合わせた問題を作る力、様々な解法を想定する能力は本当に凄かったです。

直前なのにtesterを引き受けてくださった MMNMM さんも本当にありがとうございます。

 

このコンテストの次回作「Prime & Divisor Contest 002」もいつかやりたいと思ってます。

 

コンテスト開催記は以上になります。

ありがとうございました!

【コンテスト開催記】milkcoffee & riano Contest 002 【MojaCoder】

MojaCoderにて、rianoさんと共同でコンテストを開催しました!

mojacoder.app

こんにちは、milkcoffeeです。

rianoさんと共同主催の「milkcoffee & riano Contest 002」を開催しました!

rianoさんと一緒にコンテストを開催するのはこれで2回目です。いつもお世話になっております!

 

コンテストを開いたということで、問題を作ったときの気持ち&rianoさんの問題をtesterした感想&コンテストが終わってみての感想を書いていきます!

 

問題一覧

リンク先から解説も見れます。先に解説を見てしまいたい方はリンク踏んでどうぞ!

★マークついてるやつがwriterした問題、それ以外はtesterした問題です。

 

★A問題(200点):「Gears」

★B問題(400点):「Long Digits Number」

C問題(500点):「Never Surrender」

★D問題(600点):「A+BC」

E問題(700点):「One-way and Once a Way」

F問題(900点):「Binary-Search Game」

 

問題を作ったときの気持ち

A問題(200点):「Gears」

Power Pointで歯車の図を奇麗に描けます!!

f:id:milkcoffeen:20210701015503p:plain

気づかないと地獄に見える、気づけば簡単な問題です。ある意味ギャグ問?

歯車の回転数の比は間の歯車に依らない、というのを初めて知ったときに感動したので、その感動を共有したいと思って問題にしました。

 

B問題(400点):「Long Digits Number」

 16進数できれいに倍数判定できるか?と考えて作った問題です。

立式を丁寧にすれば、ある条件が見つかると思うんですが、これも気づくのは難しいと思います。どれくらい解かれるか想像つかない・・・

 

D問題(600点):「A+BC」

自信作です!!!!

とても難しいと思いましたが、上位の人は2分くらいで通してる・・・恐ろしいです。

O(N√N)の解法は思いつきやすいと思いますが、O(NlogN)に落とすのがポイントです。

ギリギリまで制約上げましたが、かなりがんばればO(N√N)で解けるかもしれません。(testerのrianoさんががんばった結果、TLギリギリでAC取られました)

 

テスターした感想

どれも難しかったです・・・。100%自力で解けた問題はありません。

C問題(500点):「Never Surrender」

制約的と問題設定的にbitDPっぽいというのは分かりやすいですが、bitDPの遷移が特殊で難しいですね。全域木を作るようにbitを増やしていくという遷移が面白い問題です。

E問題(700点):「One-way and Once a Way」

解説を理解するのに一番苦労しました・・・。複雑すぎる数え上げですね。

rianoさんに丁寧に説明していただいて、泣きながら解説ACしました。

F問題(900点):「Binary-Search Game」

区間DP&天才的な発想が必要で、解説を見て目から鱗でした。

こんな問題作れるのすごい・・・

 

結果

順位表

f:id:milkcoffeen:20210720003249p:plain

上位を取った方々、おめでとうございます!

C問題とD問題のAC数が同じ、E問題とF問題のAC数が逆転と、波乱の展開でした!

FA一覧

 

全体の感想・まとめ

自分としては自信のある3問が出来たと思ってます。

rianoさんの問題もどれもad-hocで面白い問題で感動してました・・・

 本番中はrianoさんと一緒に順位表を眺めていました。各問題FAが出る瞬間はすごく盛り上がりますし、自分の問題でACが出ると嬉しいものです。コードもちょくちょく覗かせていただきました!!

コンテストを開くのは本当に楽しいです。作問モチベはまだまだあるので、今後もコンテストを開きたいと思います!

色んな方と共同開催してみたいので、一緒にコンテスト開いてくれる方募集してます!

今回の感想もお待ちしてます!

 

記事は以上になります。ありがとうございました。

【コンテスト開催記】milkcoffee Penalty Contest 001【MojaCoder】

MojaCoderでコンテストを開催しました!

 こんにちは、milkcoffeeです。

MojaCoderでコンテストを開催しました。(2回目)

mojacoder.app

全4問、うち1問はrianoさんから案をいただきました(ありがとうございます!)

今回のコンテストの総提出者は約50人!多い!本当にありがたいです!

コンテスト時間が30時間、ペナ時間が30時間と特殊なタイプのコンテストでした。

コンテストを開いてみての感想&各問題についてお話をしようと思います。

各問題の詳しい解説はMojaCoderの問題ページをご覧ください!

 コンテスト開催にあたって

「引っ掛け問題を作りたい」

何故そう思ったか。前回コンテストを開催してみて、自分の作った問題でペナが出ていることに”快感”を覚えてしまったからです。

そしてペナが出まくるコンテストを作りたい、1ペナの時間をめっちゃ多くしたらもっと楽しいんじゃないか、そう思ってこのコンテストが生まれました。

普通のコンテストと違うのは、あらかじめ「ペナを誘発させる問題を用意していますよ」という主催側からの宣戦布告があることです。

参加者が身構えることを前提として、こちらも予想を超える引っ掛けを作らないといけません。なので、どの問題でも「2つ以上の引っ掛け要素」を意識して作りました。

#1:「Under M」(100点)

(リンク)Under M | MojaCoder

FA:enthrmさん(3:07)

正解者数:41人

ペナ数:31

最初の問題ですが、ちょっと汚いやり方でペナを取りに行きました。N^Nの下M桁を求める問題です。余りを使って求めたくなるところですが、下M桁が「00...」みたいになる場合があるので、単純に余りで答えを出そうとするとWAです。かといって余った桁を0で埋めればいいわけでもなくて、場合分けが必要になります。

注意をすれば大丈夫とはいえ、数分でACしてる人がいるので驚きです。凄すぎます。

個人的には面白くはない()問題だと思ってますが、ペナコンの1問目っぽい感じはしますね。

#2:「RGB walking」(200点)

(リンク)RGB walking | MojaCoder

FA:googol_S0さん(16:57)

正解者数:31人

ペナ数:20

f:id:milkcoffeen:20210602151856p:plain

個人的にはお気に入りの問題です。グリッド問題は楽しいですね。

問題設定を考えた時はコーナーケースのことは考慮してなかったんですが、考えてみたら良い感じになったので、ペナコンに持ってきました。

発想としては「グリッドがめっちゃ広ければYesになりそうだな」が起点となって、あとはHとWが小さいときにどうなるか、を丁寧に考えていくと良いです。

初めは問題文の最後が「milkcoffee 君が(H,W)で塗ることはできますか?」だったんですが、コーナーケース(「1 1」の場合)を作りたくてに変更しました。実際「1 1」で引っかかってる方がかなり多かったです(こういうのを見るのが楽しいですね)。

#3:「Slice Cube」(300点)

(リンク)Slice Cube | MojaCoder

FA:kaikeyさん(44:38)

正解者数:17人

ペナ数:36

f:id:milkcoffeen:20210602161417p:plain

図らずも今回のコンテストの最少ACになってしまいました。ペナコンなので端から虐殺するつもりはあったんですが、#4より正解者が少ないのは意外でした。

コードはシンプルになりますが、やはり考察は重いですね。想定緑Diffとか言ってましたが全然そんなことなさそうです。

解法はひたすら場合分けです。幻の点Sをもう1つの辺上に考えて、それがどこに来るかを考えるとある程度は場合分けできます。それでもコーナーケースはあって、testcase-10の「11 11 4 8」で落ちてる人が多かった気がします。

立体のイメージが掴めないとかなり解きにくい問題だったと思います。自分はキッチンの汚れ取る四角い白いスポンジみたいなやつ(?)を切って考えたりしました。

参加者によって間違っている部分がかなり違っていて、その分惜しい人も多かったですね。2問連続場合分け問題ですみません。

 

#4:「Sqrt Equality」(400点)

(リンク)Sqrt Equality | MojaCoder

FA:emthrmさん(15:07)

正解者数:21人

ペナ数:53

この問題の案&解法案はrianoさんからいただきました。テストケース作成も手伝っていただきました。ありがとうございます!

シンプルですがかなり多くの引っ掛け要素が詰まっていて、すごくいやらしい問題だったと思います。予想通り、大虐殺をかましてくれました。また、例の有名な問題にすごく似ているのですが、想定解は全く違うというのも面白いですね。

想定解ではA~Dを最小公倍数で割るとうまくいくんですが、0が入っている場合に気を付ける必要があります。

ちなみにPythonみたいなオーバーフローの無い言語だと式変形のみでいけるみたいなんですが、それでも正負の場合分けがあったりでペナからは逃げられないみたいです!

sqrt関数でごり押してACされてる方もいましたが、それもまた一興。

総評

1位:Nachiaさん

2位:emthrmさん

3位:toyyyyoさん

おめでとうございます!!!

f:id:milkcoffeen:20210611000821p:plain

総提出者数:48人

総ペナ数:140

全完ノーペナが3人も出ると思ってなかったのでビックリしました!流石です!

(1位でも2~3ペナすると思ってました)

ペナを30時間にすると順位表がカオスになることが分かりました。

思いついたときは逆転要素があって良いと思ってましたが、逆にペナルティを食らったらめちゃくちゃ萎える気もします。そう考えると一長一短ですが、お祭り気分でやるには丁度いいですし、何より主催して順位表を眺めるのは楽しいです。

自作問題については、ちょっと場合分けに偏ってしまった感じがあるので、問題設定から自然にペナを誘発させられるような問題を考えたいです。それが思いついたらペナコン002やります!

これから

今回はペナルティコンテストを開催しましたが、まだ色んなコンテストを開いてみたいなと思ってます。具体的にはこんな感じで考えてます。

・ゲームコン(ゲーム問題のみ)

・1行問題コン

・Nコン(入力がNのみ)

素数コン(素数・約数問題のみ)

・グラフコン(グラフ問題のみ)

・○○[アルゴリズム名]コン(解法のキーワードが与えられる)

普通の真面目なコンテストも開きたいと思ってます。

一緒にコンテスト開催をしてくれる方、問題案があってもなくても良いのでDMやリプライしてくれると嬉しいです!

 

コンテスト開催記は以上になります。

ありがとうございました!

 

入青!一年間やってきたこと

こんにちは milkcoffeeです。AtCoder青色になりました!

f:id:milkcoffeen:20210512005844p:plain

 

青になったら色変記事を書こうと決めていたので、早速はてなブログに登録してこの記事を書いています。

AtCoderを始めてから約一年経ちましたが、今までどんな勉強をしてきたのかをざっくり書こうと思います。

 

 

自己紹介

情報系学部に通っている大学三年生です。

AtCoderではmilkcoffeeという名前でやってます。

使用言語はC++です。

Twitterもやってます。(@milkcoffeen)

twitter.com

アルゴリズムの勉強&精進

どんなアルゴリズムを勉強したか、どんな感じで問題を解いていたかを書きます。

AtCoder Problems の記録です(青になった時点)

f:id:milkcoffeen:20210512014556p:plain

f:id:milkcoffeen:20210517144857p:plain

f:id:milkcoffeen:20210517150844p:plain

大学の長期休暇に集中して精進しました。

基本は今の自分と同じ色と、自分より一つ上の色の問題をメインでやってました。水色になってからはVirtual Contest(主にくじかつ)によく参加していました。

Training や Recommendation はあまり使わず、ABCの過去問Tableを見て目に入ったものを解くことをやっていました。

ちなみに、考察にはノート(グリッド付き)を使っています。

以下では、各色のときに具体的に何をやっていたかを書いていきます。

灰色前半でやったこと

コンテストに出て、ひたすら言語に慣れることを繰り返していました。特に私は途中でC言語からC++に変えたこともあり、慣れるのに時間がかかりましたが、コンテスト中に調べながら問題を解いて勉強していきました。

コンテスト以外で問題を解くということはあまりしていませんでした。

灰色→茶色でやったこと

全探索(bit全探索、順列全探索など)や、簡単なアルゴリズム(累積和、いもす法、約数全列挙、素因数分解)を勉強しました。

精進では、過去のABCのB~C問題(主に灰Diff)を埋めていました。この辺りは分からなかったらすぐ解説を見てとりあえずコードを完成させる訓練をしていました。

茶色→緑色でやったこと

アルゴリズムは、UnionFindやBFS、DFSといったグラフ系のものを覚え始めました。しかし、どちらも内容を理解したというよりは、ライブラリとして使えるようにしただけでした。それでも基本的な問題は解けることもあったので良かったと思います。

また、蟻本を買ったんですが、内容が難しく感じてあまり読んでませんでした。(ナップザックDPが全く理解できなかった。)

精進では、過去のABCのD~Eの中で解けそうなもの(主に茶~緑Diff)を埋めていました。また、Streakを繋ぐためだけに灰色の問題を解く日もありましたが、やっぱりコードは毎日書いた方が書くのが早くなって良いと思います。

緑色→水色でやったこと

この時期に一番アルゴリズムについて勉強しました。主にE8さんの競プロ上達ガイドライン中級編に書かれていることを勉強していきました。

最短経路問題(ダイクストラ法、ワーシャルフロイド法、ベルマンフォード法)、最小全域木問題(プリム法、クラスカル法)、動的計画法(ナップザックDP)について勉強し、理解できました。また、BFSやDFSについての応用問題も解けるようになりたいと思い、何も見ないで自力で書けるようにしました。蟻本の内容も理解できるようになり、寝られない夜に布団の中で読んだりしてました。

また、C++STLにあるデータ構造(stack、queueなど)を勉強して使えるようにしました。

精進について、Virtual Contest(主にくじかつ)に積極的に参加しました。Virtual Contestのように限られた時間で問題を解く練習は、本番中に良いパフォーマンスを出す練習としてかなり効果が高いと思います。

この頃に競プロ用のTwitterアカウントを作り、同じくらいのレベルの人や強い人をたくさんフォローしました。コンテスト終了後は問題の感想や別解などが見れるので、勉強にもなりますし、モチベーション維持にも最適ですね。

水色→青色でやったこと

アルゴリズムについては、これまで理解できなかった難しいものを理解して自力で実装できるようにしました(bitDP、区間DP、桁DPなど)。EDPC(Educational DP contest)の問題を埋めて、DPへの理解を深めました。EDPCの効果はかなり大きいと思います。他にはセグメント木、行列累乗、写像12相、LIS、LCAなども勉強しました。(セグメント木についてはもっと早くやっとくべきでした。)

精進については、続けてくじかつに参加しました。それ以外にも、実装練習のために緑Diff、考察訓練のために水~青Diffを解く、という感じの精進をしました。水Diffについてはできるだけ早めに解く、青Diffについては時間をかけてじっくり解くという感じです。

また、Codeforces に参加するようになりました。典型問題の練習になったと思います。

アルゴリズム一覧(理解しやすい順)

個人的に「原理を理解しやすい」と思った順に、自分が知っているアルゴリズムを並べました。出やすさ、実装しやすさはほとんど考慮してません。色は自分がそのアルゴリズムを勉強したときの色です。

アルゴリズムの基礎的な問題はAOJ(Aizu Online Judge)にたくさんあります。AtCoderの問題はアルゴリズムを応用する問題が多いので、勉強したばかりのものは先にAOJで定着させると良いです。

何から勉強していいか分からないときはこれの順にやってみてください。

 やって成功だったこと

青色になるまでの取り組みで、レートを上げるのに貢献したであろう行動です。

  • コンテストに参加する

当たり前ですが、これは私が一番大切にしていたことです。時間に少し遅れたり、提出したことでレートが下がるのが不安だったりしても必ず参加(提出)していました。コンテストに出たことで一時的にレートが下がっても、そのコンテストに出た経験のおかげで、将来的にレート上昇につながると考えていました。実際に、本番の時間内で考察をしてコード化するスピードが身に付き、問題を通せなかった悔しさは勉強のモチベーションになりました。

Virtual ContestやCodeforcesに参加した理由も同様で、やはりコンテストで良いパフォーマンスを出すにはコンテストに出るのが一番の訓練になると思っています。

  • Twitterで競プロ用アカウントを作る

自分と同じくらいのレベルのライバルがたくさん見つかることでモチベーションになりました。また、分からないときは強い人がすぐに教えてくれるので助かりました。コンテスト後に他の人の感想を見るのも楽しいですね。

  • オリジナル問題を考える

水色になったあたりから始めた取り組みで、自分で競プロの問題の案を作ってスマホのメモ帳に貯めていました。問題を考えることで、パソコンを触ってない時間にも考察トレーニングになるし、作問者の気持ち(ひっかけポイントなど)も分かります。また、自分の考えた問題が本番中に出ると爆アドです。一度ARCで自分のオリジナル問題と完全に同じ問題が出たことがあります。作問についてはまた別の記事でお話しようと思います。

反省点

  • コンテスト後の復習はしなかった

皆さんはコンテスト後に自分が解けなかった問題を復習しますか?自分はコンテスト終了後は気が抜けてしまって復習をほぼせず、しばらくしてから解き直すみたいな感じです。コンテストの復習はその日のうちにやる方が良いと思いますが、中々できませんでした・・・

  • 苦手な問題を飛ばした、解説ACをしなかった

精進のとき、パッと見で苦手そうなときや、少し考えて全然分からなそうなときは、解説を見ずに別の問題に移ることがよくありました。これでは自分の苦手分野が克服されず、また新しい知識や考え方も得られないと思うので、直したいです。

まとめ

青になったばかりですが、黄色を目指して頑張りたいですね。まずは水Diffと青Diffを埋めて、少しずつ黄Diffも解けるようになっていきたいです。一年後に黄色を目指します!(最終的には橙色になってABCで作問するのが夢)

記事はこれで終わりです。初めての競プロ記事ですが読んで下さりありがとうございました!これからまた競プロに関する記事を投稿するかと思います。