学内の競プロ合宿(仮)参加記

はじめに

学内の競技プログラミングサークル"RiPPro"が開催する合宿に参加したので、それについて書く。

今回の合宿は、サークル内の人のみの参加となっており小規模で、日程は1泊2日。予定では6名、そこから2名のキャンセルが出て実際には4名での開催となった。

宿泊に利用する施設は、学内にある「エポック立命21」で、チェックインまでの活動も同施設で行った。

 

さて、自分が現在所属しているRiPProでは、過去にRUPC(立命館大学競技プログラミング合宿)を開催していたが、RUPC2020がコロナウィルスの影響によって中止されて以来、そのようなイベントは開催できていない。

自分がRiPProに所属したのは最近のことなので、開催できていない理由については自分の知るところではないが、一度間が空いてしまえばきっと開催するハードルも上がるのだろうと勝手に推測している。

そういうわけで、まずは小規模の合宿に参加することでRUPC開催のヒントが得られると考えたのが、参加に至る主な動機である。

また、参加記を公開することで、少しでも合宿の空気や注意点、さらには「RUPC2024があるかもしれない」ということを周知できると期待し、本記事を書いている。

09/18(月)

各自で昼食を摂り、12:40分に大学内で集合とのことだったので、自宅の最寄り駅から南草津駅まで電車で移動したあと、周辺でラーメンを食べた。

食べ終わるとちょうど12時頃。この日は晴れていて暑かったので、ちょっとした移動でもすぐに汗をかいてしまった。

大学まではバスで移動するつもりだったため、本来はバスの時間を気にするべきだったが、少し待つだけで乗車できた。後から知ったが、どうやら次のバスは1時間後にしかなかったらしく、かなりツイていたらしい。

 

大学の集合場所に着いたのは自分が2人目で、既に到着していた団体長と話していると、iPadでコーディングする予定だった自分にノートPCを貸して頂けることになった。

13時からは「交流室」を予約しているとのことで、そちらに移動した。この部屋がなかなかに広く、規模の大きいイベントの際にもぜひ利用したいと思った。

宿泊部屋はチェックインが15時からなので、それまではサークルについての議論や、競プロに関するちょっとした遊びをしていた。後者は「複数人が1つの問題に対して1行ずつコーディングする」というもの。普段書きなれていない変数名や記法が混沌を生じさせていて面白かった。

15時からはチェックインができるので、各自が宿泊部屋に荷物を置いたあと再び交流室に戻り、今度は勉強会をした。

ここで、当日集まったメンバーの競プロの実力について書く。AtCoderのレートで示すと灰色が2人と、水色が2人。だから必然的に、自分(ともう一人の水色の人)が教える側に回ることになっていた。

勉強会ではdp(動的計画法)について、入門的な例題として部分和問題を用いて説明した。

自分は題材について少し不安があった。というのも動的計画法はさまざまな観点で説明されることがあり、その解釈は度々SNSで話題になることがあると知っていたからだ。

ただし、そうしたいざこざを危惧して不安に陥っているわけではなく、人によって適した説明が存在して、それらが同じとは限らないという点で悩まされていた。例えば、自分なら蟻本のメモ化再帰から展開される説明は厳密であると思う反面、難しそうだなと感じたし、dpについて「適当な状態に分けて同一視することで、正しい値を計算することができるまま計算量を減らしている」という風に自分は理解したが、これが自分以外にうまく伝わるとは限らない。

こんな調子で自分が唸っていると、もう一人が「配るdp」での説明を始めてくれたので、自分はそれに便乗する形で説明を続けた。灰色の2人が例題を解き終わったところで勉強会は終了。時計に目を遣ると18時くらいだったので、しばらく話し合って夕食はピザを出前してもらうことに決まった。

 

19時にピザが届いたので、先ほどまで勉強会をしていた交流室で食べた。(注 : 交流室では飲食が許可されていますが、宿泊部屋では飲食が禁止されています)

そのあとは4人で近くのスーパーに買い物をしに出掛けた。夜食やおやつも大事だが、夏季休暇中は大学のあらゆる施設の開店時間が遅いため、朝食を持参していない場合はここで必ず買う必要があった。全員が思い思いの品を買って、9時前に宿泊施設に戻った。

当初の予定では、このあとシャワーを浴びて、サークルが開催するバーチャルコンテストに参加することになっていたが、時間が押しているために、シャワーを浴びるのを後回しにすることになった。

また、交流室は22時までの利用となっていたので、以降は基本的に宿泊部屋に居ることになった。宿泊部屋は、交流室と比較して狭く思える。8人分のベッドと4脚の椅子と机があり、他に気になるものはなかった。幸か不幸か、4人全員で机を使うことができたため、問題を解くのもここで行うことになった。

 

午後9時からは、サークルで開催するバーチャルコンテストに参加した。6問100分で、参加者が初見の問題のみからなるセットになるように設定されている。93分3ペナ全完。

一番に全完したので一足先にシャワーを浴びることができたが、全く頭が回っていなかったため、硬貨を持っていないのにコインロッカーに着替えを含む荷物を入れたり、二回も頭を洗ったりしていた。設備について、脱衣所は一般的な銭湯のような形式で、コインロッカーのほかに衣服を置いておくかごがある。シャワーは完全な個室ではないが、自分の知っている物だと試着室に近く、シャンプーとボディーソープは備え付けのものがある。

全員が部屋に戻ってからは、当然のように感想戦が始まったのが印象に残っている。灰色の二人は鉄則本を持ってきていたため、目次を参照しながら今後の学習計画についてアドバイスをしたりもした。そのまま流れでトランプを使ったゲームをやることとなり、結局午前1時過ぎに就寝。

09/19(火)

5時半に起床。ベッドが硬く、全く満足に寝ることができなかった。

他の3人が起きるまで音ゲーをして時間を潰していたが、7時半まで待って一向に起きる気配がなかったので一人で朝食を摂ることにした。給湯室で電気ケトルが利用できるのでコーヒーも淹れた。

その後は部屋の全員が起きたので10時前にチェックアウトを済ませ、前日と同様に交流室を借りてなにかすることになった。また、前日は参加できなかった人とも合流し、これで5人。交流室では、主にサークル内でバーチャルコンテストを定期的に行うことと、そのセットの難易度を決めた。

12時には交流室を出て、いよいよ宿泊施設を発った。昼食についてなにも決めていなかったため、その場で解散することになった。

さいごに

全体的に楽しかったと思う。本文では省いているが、RUPCのことについても喧々諤々と議論できていたし、これから具体的に動いていけそうだと思うと、明るい気持ちになった。

反省点があるとすれば、作問についてあまり話すことができなかった点。これは自分が話を切り出すタイミングが無かったわけではなく、単に失念していただけ。作問の経験があるのは自分だけだったので、話すべきだったと考えている。

AtCoder メモ

ABC308でratingが水色になった

AtCoder Ploblemsには、日時を指定して過去の時点での精進量をみる機能はなさそうなので、一区切りついた今、メモしておく

 

これまでにやっていないこと(ここに挙げたこと以外であって、やっていないことも当然ある)

 

・ARC対策

より正確には、ABCでのみrated参加をすることを前提にして競プロに取り組んでいた。

・虚無埋め

・蟻本に載っている問題を解きに行くこと

AtCoderで意図せず類題に出会って解くことはあった。

・コンテスト外で苦しんで書くこと

やっていたかもしれないが、積極的にはしていないし、苦しんで書いた末に諦めていることのほうが多いと記憶している。

 

・幾何の理解

・全方位木DP

これは簡単なものでいいからやるべきだったと思っている。

区間DP

一瞬だけやったが、修得したとは言えないレベルなので。

・HLDの理解、使用

どちらも惜しいところまでやっているはずなのに、なぜかやっていない。

・Sparse Table

関連するセグ木や平方分割は知っているし、(前者はACLだけど)書ける。

・フロー系の実践

内容は蟻本を読んで理解しているつもり。

・ロリハ以外の文字列アルゴリズム(suffix-arrayとか)

つまり、ACLに入ってる文字列アルゴリズムはどれも使ったことがないし、ほとんど理解していない。

・形式的べき級数

何から手を付ければいいかわからない。FPS版APG4bがあればうまくいくと思っている。体系的に学びたい。