仮のブログ

仮です

OUPC2023参加記

はじめに

 2024/1/6,7の2日間にわたって大阪にて行われたOUPC2023に参加してきました. これはその参加記です. コンテスト外のことも書いたので日記に近いです.

参加の決意

 もともと有志コンが好きなので都合が合えば行こうと思っており, 特に大阪は観光にも行きたいと思っていた場所でした. 実家(浜松)からそのまま行けそうだったこともあり参加を決めました.

day1

コンテスト前

 AM5:20起床です. 青春18切符で開場に間に合うことに気づいてしまったことが早起きの原因ですが, 旅費が浮いたので無問題です. 仙台~浜松間の移動も18切符で強硬したので実質5000弱で仙台から大阪まで行けました.

 11:00 頃に最寄り駅についたので, そのままお昼ご飯を食べに行くことに. 夜居酒屋昼定食屋の良さそうなお店を下調べしてあったのでそこを目指すことにしました. 着いた時には開店前だったので一度コンテスト会場の下見に行き, 開店時間に店に戻りましたが, 店が開く気配がありません. たまたま店主らしき方がお酒を運んでいたので尋ねたところ, 新年は1/9からの営業とのこと. 悲しみに打ちひしがれましたが, 下調べばっちりな私は代替案として近くのラーメン屋を2件ほどあたりを付けていました. 時間も迫りつつあったので速足でそこに向かうと, 一軒目は12:00開店で, 二軒目は混んでいてどちらも12:30の集合に間に合わなさそうでした. 結局コンビニでおにぎりを買ってそこら辺のベンチで食べました.

 12:00過ぎに会場である大阪大学中之島センターへ. 何かお高いホットドッグの売られるこじゃれたカフェが一階に入るおしゃれな建物でした. その後は適当に時間をつぶしていたらほどなくしてチーム決めの時間に. day1はチームを何も考えていなかったので, ランダムで決める勢に混じりました. 結果, KumaTachiRenさんとStronさんと組むことになりました. チーム名は「 🐈🐕🦉」. KumaTachiRenさんとクリスマスコンでチームを組んだ時に, KumaTachiRenさんが最近使っているらしい🐈名義に私が🐕をくっつけ, 今回さらに🦉がくっついた形です. 動物が賑やかだし順位表で目立つので良い名前でしたが名札に上手く書けずに困りました.

コンテスト(阪大セット)

 最初StronさんのWifi接続が上手くいかず, 私とStronさんで対処をしつつ, その間にKumaTachiRenがCを読んでいました.
なんとか接続できたっぽいので, StronさんにA,Bを任せて私は後ろの方を眺めました.

 一通り概要をつかんだ後順位表を見るとLが解かれ始めていたので, まずそれを解くことに. 一瞬45度回転させて座標を分離する典型が頭をよぎりますが, 冷静になると対称性から一発であると分かります. こういう問題, ギャグと言われがちですが実は結構好きです. さくっと実装してAC. ここまでの間にチームメイトがC,Jを通していました.

 その後, Kが解けそうなのでKを解くことに.
やりたいことはすぐにわかりましたが, 実装が中々込み入りそうで苦手なタイプです. どうせ時間はたくさんあるので, 適宜デバック出力で確かめたりコード量が増えてもバグらせにくい書き方にしたりなどまったりコーディング. その甲斐あってコンパイルが通ってからは一発でサンプルが合い, そのままACできました. ほどなくしてStronさんがAを通したのでその後の作戦会議を軽くします. StronさんにはそのままBに挑んでもらうことにして, 私は残りの問題を考えることになりました.

 序盤から解かれがちだったのはD問題でしたが, 私もKumaTachiRenさんも文字列苦手と言って回避をし続けていたためほぼ手つかずでした. AC数も増えてきて流石に解かなければマズいということでDに本腰を入れることにしました.
まず各バーガーの様子がつかめないので適当に具体例を拵えると, 隣り合う文字を貪欲に消していけば判定問題が解けることに気づきます. ここまで来てしまえば構築は簡単で, stack等を使えば末尾に付けなければいけない文字が分かり, それが最短となります. よってサクッとAC, したかったのですが, 全バーガーでないといけない事を忘れていたり, そのための場合分けにミスを埋め込んだりして時間を取られてしまいました.

 その後は私がHで嘘を生やしたり, Iで部分点を取ったり, それを無理矢理枝刈りで通そうとして通らなかったり, KumaTachiRenさんがQを通したりしましたが, その後はパタリと進展が途絶えました.

 何とかHをbitset高速化で無理矢理通したり部分点をかき集めたりしましたが, そこまで点を伸ばせずday1はチームで9完+5点でした. コンテスタント面ではもっと解けるべき問題があった気がしますし, チーム関係面では競プロ始めたてだったStronさんにもっと声かけをすべきだった気がするのが反省点です.

コンテスト後

 開場に残って感想戦やら駄弁りやらをしていたらいい感じに夕食会が生えたのでそれに参加しました.

 大阪らしいものが食べたいという要望を受けて大阪らしいものが食べられる居酒屋をkotamanegiさんがchoiceしてくださいました. 串カツやとん平焼きやお好み焼き等が食べられて大満足でした. その後は向かう方向が同じ人と談笑しながらホテルへ. この日はHello2024があったので, 出る気満々でレジの画面を開いたところで一旦お布団にダイブしてしまい気付いた時には夢の世界へ...... 先にレジっていなくて良かったです.

day2

コンテスト前

 この日は午前にday1阪大セットの解説会が開かれました. day1は考えが足らずに解けていない(:=粘れば収穫がありそう)問題がそこそこあるように感じたので, 私は解説には参加せずに気になった問題の解説だけ見るようにしました. という訳で午前はしっかりめに睡眠をとったり散歩をしたりして, お昼ご飯は鯛ラーメンを食べに行きました. 大阪らしいのかは不明ですが, 前日にtkoさんが食べていて美味しそうだったのでそこに行きました.

 普段なら4桁円するラーメン(セット)はまず食べないのですが折角の旅でお財布が緩くなっていたので迷いなく鯛担麺&鯛めしセットを注文. ちゃんと美味しかったので満足です. その後前日同様中之島センターに向かい, 適当に過去のHCPCの問題を解いて時間つぶし. day2は事前にtkoさんとsuisenさんと組むと取り決めをしていたので, 合流.

コンテスト(北大セット)

 まずsuisenさんがAをさくっとAC. 私は後ろの問題から見て行って, Iが簡単だったので実装権をもらって実装. ちゃんとACLは展開しているはずなのにCEが出て, 慌ててACLを使わない方にしてみましたが, やはりCE. 結局言語設定がC++17でなくC++になっていただけで, 無駄な時間を使ってしまいました.
 その後はそれぞれが解けそうな問題を一通り解く流れに. Bが構築だったので私はBに目を通しました. 紙に書いて考えているうちに, 2を最小化というのを段々と忘れていき, 解けたと思った頃には完全にそれを失念していました. 当然失念したままのコードでACを取れるわけもなく, 考察のし直し. 幸いにも修正の考察もすぐ終わったので, 実装が空くまで他の問題にも解くことに. その前にtkoさんとEを軽く考えていて, 大体二項係数になるはずだけど細部が合わないというところまで来ていたので, それを詰め切ることにしました. 概ねは経路問題に帰着されますが, B側の数列を全て使い果たす場合に確率がそれまでとズレるのが合わない原因でした. Bを使い果たす場合もそれはそれでいい感じに立式できるので, それをtkoさんに投げて無事AC. この時点で, ABCDEIKを通し, 残りはF,G,J,Hの4問です.

 G,Jはライブラリ強々なチームメイト2人に任せて, HとFを並列で考えます.
 Hは何でも出来そうな制約でいて何もできません. 何度か考察を生やしましたが, 結局最後まで嘘考察か実用的でない考察しか生えませんでした.
 Fの方は部分問題がいい感じに解けて, 後は頑張るといったところまでは辿りつけましたが, 計算量がかなり怪しい解法です. 実装はG,Jで使われていたので, その間に計算量のボトルネックを削る案を紙上で考えますが, 難しい.

 Gの最初に考えていた解法は実装したところ上手くいかなかったようです. 一旦Jに実装をパスという流れになったので, 私もGを考察することに. 上手いこと考察ほぼなしの人員が加わったのが功を奏したのか, 直径の端点だけに注目する解法を生やすことに成功します. いい感じの正当化をみんなで考え, 無事AC. その前に通していたJも併せて, 残りはF,Hの2問に.

 とりあえず計算量の怪しいままでFを実装してみますが, やはりTLE. 誤差に収まることを期待して枝を狩ると今度はWA. bit全探索の順番を意識して, 計算量から一つ  n を追い出すことで, 少しテストケースが進むがそれでもTLE. さらに定数倍高速化をして, AC. チームが湧きました.

 その後はHを考えたり考えなかったりしてコンテスト終了. 10完で13位.

コンテスト後

 day2はそのまま解説会に移行しました. Fは考察をもう一歩進めると X を何個かの  \log に落とせるようで, 全く気付きませんでした.
解説会後は昨日に引き続き懇親会です.

 今日は何人かがボードゲームを持ってきていたので観戦や参戦をしました.
ケーキを切ったり集めたりするゲームでは最終局面で定石とは一見外れた妙手を決めることができ, 芸術点の高い勝ちを収められたのでso happyでした.

 その後は残った人々で夕食を取りに行こうとしましたが, かなり人数が膨れ上がっていたため, 店舗に入るのは断念して梅田のフードコートに行きました.
[ここに入れる予定だった天丼の写真は取り忘れた]
 昨日もそうでしたが精進方法について強い人たちから話が聞けたのが良かったです.

 uetaさんと梅田地下ダンジョンで迷子になりつつホテルに戻って2日目も終了.

day3

 帰りは新幹線を使う予定で時間に余裕があったのでホテルから歩いて難波方面に向かいました. 数日分の着替え+ノートPC+数学書数冊を持ったままだったのでそれなりにきつかったです.
当初は難波でたこ焼きでもと思っていましたが, 落ち着いて食べられそうな場所は混んでいたためそそくさと退散して新大阪駅構内に目標を変更しました. しかし, 当然のように新大阪駅も激込みで, 結局売店志津屋のパンをゲット. 大阪というよりは京都な気もしましたが美味しかったのでOKです.
 行きに計17時間かかった道のりも新幹線なら3時間半で仙台へ到着. いつものアンパンマン像は幼い子がアツい抱擁をしていて写真を撮れる感じでなかったので近くのバイキンマンの写真をとってこれにて私のOUPC2023は終了しました.

最後に

 今回も様々な方と交流でき, また精進のモチベーションを得ることができて素晴らしいオンサイトでした. また機会があれば各地のオンサイトに顔を出したいです.
 最後にこそっと宣伝ですが, 2024/3/9には東北大学キャンパス内にオンサイト会場を設けてTUPC2023を開催予定です. 是非お越しくださいませ.