会津大学競技プログラミング合宿2017 参加記

9月18日~20日に行われた「会津大学競技プログラミング合宿2017」に参加しました。

Day1:立命館セット

~コンテスト前~
会場の準備や買い出しのため、会津大生は朝9時の集合だった。生活リズムが崩壊していたため2時間ほどしか寝られなかった。

11時を過ぎたあたりから参加者の方々が会場に到着し始め、13時になり大体揃ったところで自己紹介が始まった。自分はトイレに行っていてほとんど聞けなかったけど、うくさんの悪魔的自己紹介を聞けたので満足。

チーム決めは、黄コーダー以上の人がランダムに二人選ぶ形で行われた。(くじ引きのような感じ) その結果、kenkooooさん(RCOの社員の方)、kawabysさん(ヅの先輩)とチームを組むことになった。チーム名は「choco_ball」(自分が好きな食べ物を聞かれてチョコボールと言ったことから)。

~コンテスト~
自分とkawabysさんが実装をして、kenkooooさんはアルゴリズムを考えたり実装のサポートをするという形で進めていった。

まず、Aを読む。やるだけなので数分でACできた。そのあと、kawabysさんがすぐにBの実装に入り、自分はkenkooooさんにCの概要を教えてもらう。シンプルな解法が出てこず悩んでいたが、kenkooooさんに色々ヒントをもらった結果、いい感じの解法がイメージできた。Bが実装中だったので紙コーディングをしていた。kawabysさんがBをACし、Cの実装に入った。添え字ミスをして時間をかけてしまったがなんとかAC。kawabysさんがDの実装に入る。

EFGを読む。Eが一番解きやすそうだったので考察を始める。最小カットで幅が1の辺が削除されていたら-1すればいいということは分かったが、削除される幅1の辺の見つけ方が分からなかった。しばらくしてkawabysさんがDをACしたので、とりあえず蟻本をみながらDinicを写経した。その間、他の二人はFを考察していた。Dinicを書いたものの、アルゴリズムの中身は全く理解していないので困った。

そこでkenkooooさんが最大流アルゴリズムの解説をしてくれた。すごくわかりやすく丁寧に説明してくれたので、僕の頭でもなんとなく理解できた。kenkooooさんの説明を受けながら実装を進めていき、なんとかサンプルに合うコードが完成。提出したがWAで、そのあともしばらくWAの原因が分からず悩む。

終了10分前ぐらいにkenkooooさんが原因に気づき、説明してくれた。それをもとにコードを書き換え提出したが、惜しくもACしたのは終了3分後だった。自分の実装がもう少し早ければACできたと思うので、悔いが残る。

~懇親会~
会場は駅前の黄鶴楼という中華料理屋。美味しかったけど海鮮系の具材が多く使われてたので少しつらかった。先生の話によるとコースで出てくる大皿より、普通に注文して出される料理の方が安くてうまいとのことだった。

会津セット問題文チェック~
大学に戻り、22時頃から会津セットの問題文のチェックをした。前日にすでにある程度やっていたので1時間ぐらいで終わるだろうと言っていたけど、結局終わったのは24時過ぎだった。前半は自分も意見を出していたけど、後半は眠すぎて意識が飛んでいた。

Day2:会津セット

~コンテスト~
作問はしてないけど、一応テスターをしたのでジャッジ側に。

コンテスト開始からしばらくして、B問題で入力形式にミスがあることが分かった。入力形式のミスは案外気づきにくそうなので次は自分も注意した方がよさそう。

~スポンサーセッション~
コンテストとその解説が終わり、今回の合宿のスポンサーであるRCOのスポンサーセッション(企業説明にようなもの)が始まった。国内企業はマニュアルとかでガチガチに縛られてるイメージだったけど、RCOは自由度がとても高く、社員の意志を尊重している感じで理想的な会社だなあと思った。とても入りたい気持ちになったけど、自分には就職難易度がINF過ぎる。

~懇親会~
会場は作蔵という居酒屋。成人組と未成年(お酒飲まない)組の盛り上がり方の差がやばく、お酒の力を感じられた時間だった(自分は11月生まれなので来年も飲めない…)。未成年組でも、らぴんぽん(いづみつはる)は積極的に他大の人たちに話しかけていてさすがという感じだった。

懇親会が終わり解散となったが、うくさんとc7さんがカラオケに行くと言い出しまじかと思った。自分も誘われたが、眠かったのもありさすがについていけなかった。

Day3:北大セット

~コンテスト前~
この日も初日と同じ方法でチーム決めを行った。kenkooooさん(2度目)、vvataarneさん(立命館の方、今年から競プロ始めたらしいのに強すぎる)とチームを組むことになった。チーム名はwataame(vvataarneさんから)。

vvataarneさんがUS配列のキーボードが使いづらそうにしていて、とても申し訳なかった。

~コンテスト~
今回も、kenkooooさんが他二人のサポートに回るという形で進めていった。

まず、vvataarneさんがAを、自分がBを読んだ。(先に言うと、自分はここからコンテスト終了直前までずっとBを考えていたため、vvataarneさんが他の問題をどうACしていったかよく覚えていない)

Bを考察するが、解法が中々出てこない。すると、kenkooooさんがヒントをくれた。(等差数列の末項を固定する、公差の正負はあとで2倍すればいいので考えなくていいというもの)そして、しばらく考えるがまだわからない。

すると、kenkooooさんがまたヒントをくれた。(直線の内側にある格子点の数を数える問題に帰着できるというもの) 計算をすると等差数列の和のなることに気づく。が、等差数列の和を求める公式を忘れていた(数弱過ぎる)ため、困る。1~100までの総和が5050ということは何となく覚えていたので、そこから何とか公式を導けた。

それをもとに実装をし、提出をするがWA。kenkooooさんが式の間違いを指摘してくれて提出するが、またWA。式の途中でもMODを取らないといけないことに気づき、修正して提出するがまたWA。MODがうまくとれていないんじゃないかと思い、kenkooooさんがpythonでコードを書き直し提出するがまたWA。最後のところで、n=1の例外処理のところでMODをとれていないことに気づきやっとAC。

Bで時間を使いすぎてしまい、結果は4完だった。(vvataarneさんが知らない間にACDを通していた、ガチプロ) MODのとり忘れに気づかないのもあれだけど、自分の数学力がなさすぎるのも問題だったので高校数学(特にAB)を復習したい気持ちになった。

~打ち上げ的ななにか~
コンテストが終わり解散となった。そのあと会津大生10人ぐらいで菜華楼という中華料理屋に行った。自分は、激辛マーボー豆腐を注文した。また、全員で唐揚げを、dohatsuさんと焼きセット(餃子、しそ餃子、しゅうまい)を割り勘して注文した。マーボー豆腐が控えめに言ってうますぎた。(近いうちに一人でまた行くと思う) 

感想

他大の競プロerと交流するのは初めてだったので、どんな感じになるのか想像できなかったけど、とても良い経験になったと思うし楽しかったです。知らない人とチームを組むのは気まずくなるんじゃないかという不安があったけど、全くそんなことはなく勉強になることも多かったです。

チームを組んでくれた方、本当にありがとうございました。今後もこういう場には積極的に参加していこうと思うので、そのときはよろしくお願いします。

来年は作問するぞ