こんにちは、みやこです。
みなさん、競技プログラミングって知ってますか?
こんな記事読んでるくらいなんで当然知ってますよね。
ということでよくある説明は省略します。
さて本題なのですが、昨日(2021/10/23)にあったABC224で入緑しました。
(追記:そういえばこの2か月後に入水しましたね。記事書いてないや。)
こうして見てみると変な形のグラフですね。
プログラミングの勉強を始めてわずか2か月のことだったので、相当驚いています。
そんなわけで初入緑したということで、せっかくなので今までやったことでも振り返っておくかくらいのノリで記事を書きます。
他の記事見てもらえばわかるんですが、筆者はアホでちゃんとした文章が書けないので、恐らく期待しているような内容ではないと思いますが、見ていただけたら嬉しいです。
え~っ!?私が競プロ少女~~!?
さて、自分が競プロを始めたきっかけから書いていきます。
自分がプログラミングを始めたのは8月末あたりで、それまでは「演算子ってなに?」「print関数ってなに?」みたいなレベルだったのですが、教養としてプログラミング言語くらい勉強しておこうかなと思って、とりあえずPythonの入門書を読み始めました。
ここまでなら文系大学生にはよくあることだと思います。
生粋の文系大学生のみやこくんはなんでここから競プロを始めたのでしょうか。
理由① ヤクザからの圧力
プログラミングの勉強を始めたことをリア友の暖色コーダーに伝えたところ、
「プログラミングは手段であって目的ではないよ。目的を決めなよ。」
と言われました。
深いですね。とても深い。自分としては別にプログラミングができるようになるのが目的だったので、特に目的を決めなくてもいいかと思ったのですが、この世界ではレートがすべてということを自分は既に知っていました。
レートが自分より高い人間に逆らうと耳を切られ、鼻をそがれ、髪を切って尼にされ、縄で縛られて痛めつけられることも知っていました。
弱い弱いみやこくんはプログラミングを勉強する目的を探し始めました。
理由② 生徒「僕と契約して競プロ少女になってよ」
さて、実は自分は某塾で中学生を教えています。そしてそこで雑談として「最近プログラミングの勉強を始めてさぁ~」と話してしまったところ、なんと生徒に競プロerが複数名いて、競プロを死ぬほど勧められました。
「令和のキュゥべえはここにいたのか」と後から考えるとそう思いますが、当時の自分は「そうだな~」と納得してしまい、軽率にプログラミングを勉強する目的として競プロを選んでしまいました。
今日の教訓
重大な物事のきっかけはいつも軽率な思いつき
ふぇぇ…わかんないよぉ……
さて、こうして無事に(?)競プロを始めたみやこくんでしたが、何をすれば良いかわからない問題が発生しました。
しかし大丈夫!Internetがあるじゃない!!!
ということで参考にした記事がこちら
この記事は本当に良かったです。何をすれば良いかわからない初心者にやるべきことの具体的な指針を与えてくれましたし、実際に解くべき問題も示されていてとてもためになりました。また、最後にレッドコーダーが親指を立てながら溶鉱炉に沈んでいく様子は涙なしには見られませんでした。
そこで、ここに書かれている通りまずはIntroduction to ProgramingⅠ(ITP1)を解くことから始めました。
このコンテンツをやれば初心者であっても、実装面でC問題まではかなり解けるようになりました。また、新しく出てくる機能があれば解説ノートが添付されていますし、Python用の解説があるのもとても魅力的でした。
初心者をABCコンテストに挑めるレベルまで上げてくれるとても良いコンテンツだと思いました。
ただ、問題を解くわけなので初心者だと往々にしてバグが解消できない問題があり、その場合に助けてもらえる友人やコミュニティがあると良いと思います。
まぁオタクくんたちはどうせTwitterとかやってるし、大丈夫でしょ?大丈夫だよね!
よーし、今日も精進だ このごろ負け続けてるからな、勝ちたいなぁ 次は勝てるかな
こうしてABCコンテストのA,B,C問題ある程度解けるようになったので、コンテストにも参加し始め、過去問も解き始めるようになりました。
しかし、当然のようにこの問題にぶち当たりました。それは
知識不足でC問題でも解けない問題が結構ある!!
ということです。当たり前ですよね。
調べてみると解けない問題のかなりがbit全探索の問題であることがわかりました。
こうしてアルゴリズムを勉強することの大切さを知ったので、みやこくんはアルゴリズムを勉強するようになりました。
そして現時点で勉強したアルゴリズムがこちら
・全探索
・bit全探索
・二分探索
・動的計画法(DP)
・貪欲法
以上です。データ構造なんてものは何も知りません。
恐らく相当少ないと思いますが、これくらいできれば3完はほぼ確実にできるようになりましたし、D問題もそこそこ解けて、場合によってはE問題も解けるようになりました。
しかし、これらは間違いなく緑に上がるためのほぼ最低ラインみたいな勉強量だと思うので絶対にもっと勉強した方がいいです。もし「これさえやれば誰でも緑になれるよ!」なんて言った日には路地裏に引きずり込まれ、臓器を売られてしまいます。さすがにまだ生きたいです。
ここから言いたいこととしては、競プロはかなりパズルみたいなところがあるので、思っているよりは敷居が低いということです。そんな高くて分厚い本読まなくてもそこそこ楽しめると思います。
最後に
ここまで長々と書いてきましたが、言いたいこととしては
・競プロは軽率に始めよう
・文系大学生でも全然いける
ということだけです。
たぶん文系で競プロやってたら、それだけで周りとの差別化になると思いますし、交友関係も広がるのでむしろ文系は積極的にやった方がいいと思います。
さぁ、あなたも
「僕と契約して文系競プロ少女になろうよ」