pitsuの記事置き場

色変記事や参加記などをまとめようかな-

月刊競技プログラミングは役に立つ 応用情報編

はじめに

こんにちは。大学生で現在B3のpitsuです。

10月に開催された情報処理技術者試験(応用情報)に無事合格することが出来たのでいつから勉強したのか、何をしたのか、競技プログラミングがどのように役に立ったかをまとめていこうと思います。 f:id:pitsu_kyopro:20201225172029p:plain

スペック

・情報系の学部3年生

AtCoder

競技プログラミングは応用情報の役に立つ

応用情報の午後にプログラミングという分野があるんですよね。

H29秋季のプログラミング分野では競技プログラミングをしている人なら聞いたことはあるであろう「ナップサック問題」が出ていたりします。

事故を起こさない限り8割は安定してくれるので合格に必要な60点のうち15点ぐらいはここで安定して取れるのはかなり大きいです。

他にもシステムアーキテクチャや組み込みシステム開発などの分野でも競技プログラミングで培った論理的思考(?)みたいなのが役立っている気がします。

ちなみに午前ではあんまり役に立ちません。(ごくまれに木に関する問題が出るくらいです)

やったこと

8/7に申し込みをして、その日から応用情報過去問道場でちまちま過去問を解いていました。

9/30時点では午前の過去問を321問解いていたっぽいです。

多分この時点では総プレイ時間50時間くらいだと思います。

10/2から午前を通しで解くようにしました。最終的には11回通しで過去問を解きました。

また、このころから午後にも手を出し始めました。

かなりうろ覚えなんですが、だいたい過去問を

やりました。

10月は毎日平均8~10時間くらいやっていたので最終的なプレイ時間は250時間くらいだと思います。

最終的にやった午前の問題数は1212問でした。

f:id:pitsu_kyopro:20201225230515p:plain

感想

午前は過去問をたくさんやれば合格圏内の60点は安定して取れるようになりました。

午後は運要素が強く、ずっと不安定でした。

体感としてはセンター国語をやってる気分でした。(センター国語6割安定めちゃくちゃ難しくないですか?)

なので正直、2,3回かかっても全然おかしくないな~と思ってました。

1回目で合格できたのはかなり運が良かったと思います。

また、応用情報で勉強できたことはかなり大事そうな知識ばかりだったのでやってよかったなと思います。

最後まで読んで下さりありがとうございました。

AtCoderで青色になりました

はじめに

こんにちは。 大学生で、現在B3のpitsuです。

9/19のAtCoder Beginner Contest 179で青色になったので色変記事を書こうかなと思います。

といっても始めた経緯などは緑になったときの色変記事で

pitsu-kyopro.hatenablog.jp

精進方法などは水色になったときの色変記事で

pitsu-kyopro.hatenablog.jp

書いたので今回は水色の色変記事以降(3月末~9月)にやったことと停滞したときのメンタルの状態、管理方法などを書いていこうと思います。

ためになる要素0です。

自分語り、自己満足しか書いてないです。

なので不快になったらすぐ閉じてください。

でも色変記事ってそんなもんじゃないですか?(偏見)

各種精進データ

f:id:pitsu_kyopro:20200923230358p:plainf:id:pitsu_kyopro:20200923230400p:plainf:id:pitsu_kyopro:20200923230404p:plain

水色になった後にやったこと

水色になるまでにやったことは今までの記事を読んでもらうとして4月以降何をしていたのか記憶とtwitterを頼りに書いていこうと思います。

3月末 ~ 4月前半

3/30までに水diffを埋め終わりました。

4月前半はAOJ-ICPCの150点までを埋めてたりしてたかな?

4月後半 ~ 5月末

codeforcesのEducational codeforces Round(えでゅふぉ)のバチャをたくさんやりました。

これにやったバチャをまとめているのですが振り返ってみると4/25 ~ 5/30の間に37回バチャをしていました。

この頃の自分すげー

並走してくれる人が結構いて、その人たちとバチャslackを作ったりしたおかげでモチベ維持ができました。

他にもAtCoder Problemsでまとめられている青diffの問題を3問まとめてバチャでやったりなどしていて、5月だけで青diffの問題を50問以上解いていました。

5月競プロしかしてなくないか?

6月

春タームが終わる時期ということで人生のほうが燃え始めたので鎮火していました。

えでゅふぉバチャはあまりできなくて10回ほどなんですが青diffのほうは同じペースでやっていて6月だけで50問近く解いていました。

また、6/20にcodeforcesのほうで紫になれました。

大成功回を引いて+193してとても嬉しかったです。

7月前半

青diffの問題で解説ACしたものが結構あったので復習をメインにやりました。

そろそろ人生のほう頑張ってみるか~と思ってWeb開発をしたりサマーインターンの応募をしたのですが、Web開発で作ったサイトはバグってお蔵入り、サマーインターンはAI面接とかいうカスでメンタル崩壊という結果になりました。

人生なんてやるもんじゃねぇ。

7月後半 ~ 8月前半

このあたりから期末シーズンに入ったのもあり、演習のTAからこのままだと単位取得が危ういですみたいなDMが来たり、教授から課題進めてなさ過ぎてやべぇぞみたいなメールが来たりと人生のほうが大炎上し始めたので全力で鎮火に取り組んでおり、あまり競プロができませんでした。

かろうじて生み出した競プロの進捗としてはHCPC(弊大の競プロサークル)の勉強会でオイラーツアーやHL分解について勉強して発表しました。

頑張ってスライド作ったのでぜひ読んでくれよな!

https://hcpc-hokudai.github.io/archive/graph_tree_001.pdf

開発のほうも少しやってHCPCの人とチームを組んでハッカソンに出て、Div2かDiv1かを入力した後に参加する人のIDを入力すると誰もやったことのないcodeforcesのセットを選んでくれるslackbotを作りました。

結構便利でバチャslackで運用したりしています。

8月後半 ~ 9月前半

8月後半は9月前半のHUPCとACPCの北大セットの作問に携わっていたのでtester解を書いたりなど作問作業をしていました。

2つのセットを同じ時期に出すのでHCPCの先輩がいろんな作業を同時平行で進めていて大変そうだなぁと眺めていました(本当にお疲れ様です

9月前半はWUPC、HUPC、ACPCと有志コンラッシュに出ていたら一瞬で溶けました。

オンラインになってしまったけどいろんな人とチームが組めてかなり楽しかったです。

来年はオンサイトでやりたいね。

レートが伸び悩んだ時のメンタル維持方法

こんな感じで精進していたのですが、レートはなかなかついてきてくれませんでした。

AtCoderのレート遷移を見ると

f:id:pitsu_kyopro:20200924003911p:plain

5,6月にあれだけ精進していたのに停滞していました。

この頃はコンテストが終わるたびにショックを受けていて、コンテストに関する話題を見たくなくてtwitterを見ることができないほどでした。

ライバルと認識してる人たちがどんどん伸びていっていて自分だけ置いていかれてるみたいな気持ちになってかなりつらかったです。

精進をやめるどころか加速させていたのに突然停滞し始めて本当に意味がわからなかったです。

なので一旦停滞している原因を探ろうと思い、冷えてるコンテスト結果をまとめてみました。

ABC168(レート -41)

C問題で短針を動かしておらず無限にバグらせる

AGC044(レート -64)

初手CEをしたはいいものの一問も溶けず0完☀

ABC169(レート -39)

†Multiplication†で誤差に敗北

ABC170(レート -4)

普通にEが解けなかった

AGC046(レート -8)

数え上げむりぃ....

M-SOLUTIONS プロコンオープン 2020(レート -47)

int型がオーバーフローしてることに気づかず無限時間詰まる&5ぺナ(これでパフォーマンス1000落ちた)

ABC169,170やAGC046は純粋に実力不足なのですが他のものは原因がかなりしょうもなくないですか????(他にもABCのA問題で間違えてpythonC++のコードを投げてしまい2ぺナするとか、21:00まで用事があって8分遅刻して参加、とかもやってました

色変記事でこんなことを言うのはおかしいと思うのですがこれを見てるとレートを気にするのがばからしく感じました。

なのでそれ以降はレートごときで僕の実力がはかれると思うなよ!!!!みたいな気持ちでいることにしました。

結局、大事なのはレートじゃなくてどれだけ問題を解けるようになるか、はやく解けるようになるかって訳よ!(フレンダ風)

暖色erの方々はコンテスト回数が少ないので1回のコンテストの重みは大きいと思うのですが青以下である僕はほとんど毎週ABCがあるからちゃんと実力がついてたら上がれるはずだしそこまで直近の結果は気にしなくてよくない?みたいな感覚を持つようにしました。

あと自分が好きなツイートがあって

この考え、本当に大事だと思うんですよね。

停滞してるとき、これだけやっても伸びないのか、自分には向いてないのかな、みたいな気持ちになったりもしたんですが、「やっても伸びない」は真か偽かはわからないけど、「やめたらもう伸びない」は流石に真だと思うのでとりあえずやめないようにすることを重要視しています。

なのでAtCoder ProblemsのStreakを繋げることで全く競プロをしていない日をなくすとかをしています。

あとは無理してコンテストに出るのは避けたり、どうしてもやりたくない問題は復習しなかったりしてます。

これをするとFAKEだの甘えだの思われそうなんですが、僕は自分にやさしいFAKEなので存分に甘えます。

というかそれで厳しくやろうとしすぎるとそれをするだけでつらくなってしまった経験があるのでそうならないようにしたいです。

これからやりたいことリスト

  • AOJ-ICPC埋め
  • JOI埋め
  • 水~黄diff埋め(高難易度避けがちなので橙にも手をだしてみたいですね)
  • Div3のやってない後半の問題埋め
  • えでゅふぉを全部バチャでやる
  • ライブラリ整備
  • 作問
  • ABC-D埋め
  • 今まで解いた問題の復習

まだまだやることたくさんありますね!

そのときの気分でやりたくなったものから埋めていこうと思います。

人生は貪欲法!(素振り

今後

青になったらひと段落ついてモチベも低下するかなって思ってたのですが、ありがたいことにモチベが上昇しているんですよね。

これは春から一緒にバチャをしてくれてた人や、同じ時期に青になった人たちの影響が大きいです。

みんな青になった後もずっと精進を続けているんですよね。

その人達に置いていかれたくない、追いつきたいという気持ちが強いです。

青になるのはみんなに負けてしまったので今度は僕が先に黄色になってやりたいですね🔥🔥

最後まで読んで下さりありがとうございました。

AtCoderで水色になりました

 

はじめに

こんにちは。

大学生で、現在B2(もうすぐB3)のpitsuです。

 

3/22のAtCoder Beginner Contest 159で水色になったので色変記事を書こうかなと思います。

pitsu-kyopro.hatenablog.jp

緑になった際にも記事を書いたのですが、ひたすら自分語りをしたので今回はできる限り、丁寧に精進方法を書いていこうと思います。(それでも基本的に自分語り中心になると思いますごめんなさい)

 

 

 

ちょっとした雑談

精進方法の向き不向きは絶対あるので一番大事なのは自分に合っている精進方法を見つけることだと思います。

自分の場合は受験期の経験をいかして精進をしたらうまくいったという感じです。

なので、この人はこの方法が合ってて成長したんだなー程度に読んでもらえたら幸いです。

f:id:pitsu_kyopro:20200326012449p:plain

 

やったこと

E869120さんの過去問精選100問

E869120さんの記事の過去問精選をやりました。(AtCoderの問題だけですけど)

これは本当におすすめです。

使うアルゴリズムがわかっている状態で問題を解くので、こういう場合にこのアルゴリズムが使えるのかーという感じで解けるのでアルゴリズムに関する知識が一気に深まった気がします。

qiita.com

 

 400点問題埋め

AtCoder Scoresを利用しながらAtCoderの400点問題を埋めました。

ほとんどの問題をわからなくて解説ACした気がします。

AtCoder Scores

 

codeforcesのDiv3バチャ

codeforcesという海外のコンテストサイトで一番難易度が低いとされているDiv3のバチャを3月はほとんど毎日やりました。

3/25をもってDiv3コンテストをすべてやりきることができました(`・ω・´)

 

自分の精進方法

解説ACは呼吸

はい、息をするように解説ACをしました。

一回目はできなくて当然という感覚で問題に挑みました。

長くて20分(ひどいときは5分)考えてなんもわからんってなったらすぐに解説を見ました。

 

解説を読む時間は長く

解説はすぐに見ますが、見た後は結構時間をかけました。

こんな感じに解説pdfの内容をノートに写したりしました。

f:id:pitsu_kyopro:20200326021917j:plain

また、コードを写経するときは一回完全に写経したあとに全部消して、もう一回何も見ずにコードを書き直しました。

 

解説見てもわからない問題は諦める

どれだけ解説を読んでもなんでそうなるのか理解できないときは自分にはまだ早いとすっぱり諦めました。

解けないけど解説を見ると理解できるくらいの難易度が一番やってて楽しかったです。

 

復習は大事

もうあらゆる問題は2回以上解くという意気込みで問題を解きました。(やるとはいってない)

こうすることで解説ACすることに抵抗がなくなったので良かったです。(これ良いのか?)

2回目は意地でも解説を見ないという気持ちで挑みました。

 

モチベを維持する方法

自分の一番の原動力は不安感です。(やばそう)

まず明確な目標を決めました。

ICPCの横浜大会やオンサイトに出たいというものです。

精進をさぼったりしているとき、こんなことしていて目標を達成できると思っているのかと考えると怖くなって精進をしていました。

ちなみにこの弊害としてゲームとかをしていても時間を浪費していると考えてしまって全然楽しくなくなってしまいました。(ゲーム結構好きだったのでこれが本当につらいです)

まあ、これは置いといて自分が意識していたことを並べます。

 

streakを繋げる

AtCoder Problemsのstreakを繋げました。

このおかげで毎日必ず一問は解くので全く競プロをしない日がなくなり、競プロが常に頭の片隅に残るようになりました。

https://kenkoooo.com/atcoder/

 

Div3コンテストを毎日やりながらTwitterで告知する

これをすると頑張ってますアピールができるんですよね。

そうするとほめてくれる人がいてそれがすごい嬉しかったです。

頑張っている人はみんなえらいので人類皆頑張ってますアピールをするべきだと思います。

 

解いた問題を日記感覚でブログにまとめる 

精進ツリーみたいな感覚ではてなブログに毎日解いた問題をまとめました。

一日飛ばしてもまあいっかーみたいな感覚で書いていたので、重荷にならず気楽にできました。

 

考察などは全部ノートにまとめる

前述したような解説をまとめたり、考察したことは全部ノートに書きました。

こうすることで使い終わったノートの山をみて、あー自分頑張ってるなーと思えました。

 

まとめ

以上が自分が水色になるまでやったことです。

この精進方法が良いのか?と聞かれると正直良くはないと思います。

簡単に解説ACするので考察力などは本当に弱いです。

また、問題を2回以上解いたり解説をノートに写したりするので時間もかなりかかります。

あとは純粋に心がつらいです。

なので最初にも言いましたが、この人はこんな感じで成長したんだなー程度ですましといてください。

 

今後 

まだ、ICPCの横浜大会やオンサイトに出られてないのでそれに出られるように精進をしていこうと思います。

しばらくはproblemsでまとめられている水difficultyの問題を埋めてそれが終わったら復習しつつ青difficultyを埋めていこうと思います。

最後まで読んでくださりありがとうございました。

AtCoder(緑)、codeforces(青)になりました

 

はじめに

こんにちは。

大学生で現在B2(もうすぐB3)のpitsuです。

 

2月中頃のコンテストでAtCoderが緑、codeforcesが青になったので色変記事を書こうかなと思います。(もう3月に入っているのですが...

役に立つとかそういうことを考えていないので、基本自分語りになると思います。

序盤は全然競プロに触れていないので読み飛ばして大丈夫です。というより読み飛ばしてください。

2/13のDiv2でcodeforcesが青に

2/16のABCでAtCoderが緑に

 

ここまでの経緯

競プロをはじめるきっかけ

去年の4月、B2に上がった頃に学部のオリエンテーションプログラミングコンテストに出ているサークル(HCPC)があると聞いたので教授にメールをしてサークルに参加させて頂きました。

そのときはプログラミングというものに全然触れたことがなく、入出力もできないまるっきりの初心者でした。

f:id:pitsu_kyopro:20200301013524p:plain

7月のICPC国内予選まで

そんな感じで初心者でしたが、サークルの方々の厚意でICPC予選に出場させていただけることになりました。

チームメンバーは今は二人とも青でとてもつよつよな人たちでした。

とてもアンバランスなチームでした。(完全に僕がお荷物なんですよね

チーム練でも本番でも役に立つことができず、本当に申し訳ない気持ちで一杯でした。

国内予選が終わった後、車校や定期試験、部活などを言い訳に全くと言っていいほど競プロをしませんでした。

f:id:pitsu_kyopro:20200301013739p:plain

11月まで

そんなモチベで夏休みに入り、夏休みも全く問題を解きませんでした。

見返してみるとコンテストも一回も出ていませんね。

後期に入り授業でプログラミングをまたやり始めたのもあり、少しずつコンテストに出て問題をやり始めました。

それでもそんなに精進って感じのことはしてないです。

f:id:pitsu_kyopro:20200301015444p:plain

11月

11月の中頃に自分にとって大きな出来事がありました。

ICPCの横浜大会です。

7月の国内予選を抜けた人たちの様子がTwitterが流れること流れること。

まあーーーーーーーー楽しそうなんですよね。

懇親会ではおいしそうな食べ物がでて、企業見学として水族館行ったり...。

羨ましすぎてストレスでした。

もういろんな方の参加記を読み漁りました。

そういう理由で、ICPCは学生しか出れないので今から頑張らないと出ることは不可能だと思ったので精進をし始めました。

あと、来年度自分はB3なので新卒枠がもらえるのでオンサイトも通常よりは狙いやすいんですよね。

そのチャンスを無駄にしたくなかったです。

f:id:pitsu_kyopro:20200301021906p:plain

12月

下の方にあるAtCoder Scoresのグラフを見てもらえるとわかると思いますが、12月はかなり問題を解きました。

正直異常精進らしきことをしていた気がします。

たぶんこの一か月に相当いろいろしてた気がするので記憶とTwitterを頼りにできる限り書いてみます。

12月の頭は螺旋本をとりあえず一周しました。

つまると無限に時間がかかると思ったのでわかんなかったところはすぐに飛ばしました。

それと並行してABCのC問題を埋め始めました。

AtCoder Virtualを利用してABCのC問題5問セットを作ったりしました。

画像見ればわかるんですが、一日に4セットしたりしてますね。

f:id:pitsu_kyopro:20200301025256p:plain

そんな感じで12/14日にC問題を埋め終わりました。

その後C問題埋めたはいいものの理解が出来ていないと思ったのでC問題の復習をしていたり、えびちゃんさん(サークルの先輩)におすすめしてもらったEDPCやChokudai Speed Runをやってました。

たぶんC問題のほとんどは2周したんじゃないかと思ってます。

C問題埋め終わりかけの時期からcodeforcesに参戦しました。

codeforcesは最初に1500レートが貰えるのを知らずに水色になって喜んでました。

その後しっかり緑に落ちました。

12月の頭までに解いた問題数がこれで

1/1までに解いた問題数がこれです。

12月最序盤を抜いても200問以上解いているので我ながら頑張ってるなぁと思いました。

f:id:pitsu_kyopro:20200301022658p:plain

その後

1月の序盤はC問題の復習をずっとやってました。

1月中頃から1月末まで、復習に飽きてきたのでcodeforcesのDiv3のバチャをほとんど毎日やりました。

サークルの先輩が作ったCodeforces Anytimeというサイトがバチャの結果で仮想のレートを計算してくれるのでモチベ維持によかったです。
codeforces-anytime.firebaseapp.com

f:id:pitsu_kyopro:20200301031746p:plain

2月に入り、春休みになったので安心して生活を破壊できたのでcodeforcesにできる限り参加しました。

Div3をたくさん解いたのが功を奏したのか2月に初めて出てコンテストで爆上がりしました。

そしてその次のコンテストで青になることができました。

そしてそのつぎのコンテストで水色に落ちました。

そして水色に落ちたコンテストの次の日のABCで緑になりました。

 12月の精進に結果が伴った気がしてすごいうれしかったです。

 

〇〇になるまでに必要なこと

ここから先に書いてあることは完全に個人的な見解です。

  茶色まで(AtCoder)

このアルゴリズムが必要というよりはC++であればmapやsetなどのSTLを適切に使える能力が必要だと思います。

そして、灰色difficultyの問題を見た瞬間に何をするかわかるようになれればいいと思います。

つまり、灰色difficulty(余裕があれば茶色difficulty)の問題をたくさん解けばいいと思います。

下手にアルゴリズムに手を出してもわかんないことが多すぎて全然進まないと思います。(経験談

緑まで(AtCoder)

緑になるためにはある程度のアルゴリズムの知識が必要だと思います。

でもそれも累積和やDFSなどのABCのC問題で要求されるもの程度でDPなどはまだやらなくていいのかなーと思っています。

そのアルゴリズムを身に着けるためには茶色difficulty(余裕があれば緑difficulty)の問題をたくさん解けばいいと思います。

これ自分は螺旋本一周してるのにそう言ってるのはおかしくないかとか思ったんですけど、緑になるまで螺旋本で得た知識を使った記憶があまりないんですよね。

水色まで(codeforces)

codeforcesは初期で1500(水色の真ん中)もらえるので最初から水色です。

つまり、参加すれば水色になれます()

しかし、問題が解けなければ当然下がり続けるので結構メンタルにきます。

なので緑になるまで、またはABCのCを埋めるまではやらなくていいと思います。

青まで(codeforces)

codeforces青になるまで必要なことはたくさんコンテストに出て英語の問題に慣れることだと思います。

codeforcesは典型問題がたくさん出るといわれがちですが、自分はとくにそういった印象は受けなかったです(解いていない高難易度帯の問題がそうなってるのかもしれないです

なので知識で殴る系の問題ではなくしっかり考察すれば解ける問題が多い気がします。

その考察力を身に着けるためにはたくさん問題を解くといいと思います。

Div3が3,4問解けることが多くて楽しいのでおすすめです。

まとめ

はい、ざっくりまとめるとたくさん問題を解いたらレートが上がったよという感じです。

自分が感じたことですが、AtCoderアルゴリズム知ってるだけで解ける問題はあまり出題されていない気がします。

そのアルゴリズムを理解してて応用されても解けるといったレベルにならないとそのアルゴリズムを使う問題は解けないようになってるなーと思ってます。

なのでアルゴリズムを勉強しててもレートに直結することは少ないのかなと思います。

そういうわけで灰色、茶色の人はアルゴリズムの勉強に手を出すより、過去問をたくさん解くのがよさそうと思ってます。

あと速解きができるとなりたい色のdifficultyの問題が解けなくてもその色のパフォーマンスが出ます。

なのでその色の問題が解けるようになるより、今自分がいる色の問題を速解きできる能力があるとレートが安定していいと思います。

速解きをするためにはたくさん問題を解くと(ry

まあこれは自分がそうやってきてうまくいったからそう思うだけで向き不向きは必ずあるので真に受けないでください。

 

今後

今後はAtCoderの400点問題を埋めたり、codeforcesでバチャをしたりしようかなーと思ってます。

バチャをしているとき一人で寂しいのでバチャをするときはTwitterで呼びかけてるので一緒にバチャをしてくれる人を募集しています。

あとはTwitterでいろんな人に絡みたいです。(これは頑張れ

でも冷静に話したことない人にリプするのめっちゃ難しくないですか?

人々どうやって仲良くなっているのか知りたい。

めんどくさがられたらどうしようとか考えるとできないので誰か絡みに来てください(他力本願

拙い文章でしたが最後まで読んで下さりありがとうございました。