feature image

2018年11月18日 | ブログ記事

水色コーダーのCODE FESTIVAL 2018参加記

こんにちは、18のmikitです。昨日開催されたCODE FESTIVAL(通称コドフェス)という競技プログラミングのオンサイトイベントに出ていました。このイベントは昨年も開催されており、xxkiritoxx先輩が昨年の参加記を書いているので参考にしてください。僕も本記事を書く上で†全面的に†参考にしています。本記事は今年度の参加記になります。ちなみに私は競プロ歴半年とかそこいらの水色コーダーなので温かい目で見てください。
そもそも競プロとは何かについてはココを見てください。

登場人物

我らがtraPからは6人が見事予選通過しました!!!!!!!!!!!!
括弧外はtraPでのID,括弧内はatcoder IDです
nari(rickytheta) : 15の現B4。全強
s_cyan(saharan) : 15の現B4。全強
baton(goodbaton) : 17の現B2。全強
xxkiritoxx(xxkiritoxx) : 17の現B2。全強
eiya(eiya) : 18の現B1。全強
mikit(mikit) : 18の現B1。カス

実はB2以上の4人メンバーは昨年のコドフェスにも参加しており、B1が追加された形になっています。僕以外青以上なので、全強怖いなあという感じです。

予選

まあ競プロ歴半年だし予選は突破できないよなあ〜とか思ってました。

予選A

お疲れ様でした #trap18summer #traP1yakudo pic.twitter.com/bwjVZ91eBA

— mikit☃️ (@m1kit) 2018年9月22日

なんとこの日はtraP夏合宿2018の最終日だった。絶好調でも厳しいのに果たして遊び疲れた後のコンディションで予選A通過出来るのだろうか。

dpの計算量評価できないマンしてる

— mikit☃️ (@m1kit) 2018年9月22日

はい。歌志軒をたらふく食べて合宿後で睡魔が襲う中何も考えずにdpを書いたらTLEしてA,Bの2完に終わりました。440位なので予選Aでは当然のごとく通過できませんでした。

予選B

予選Aで440位なので、まあ当然予選Bでも本戦出場ラインには到達しないだろうし練習がてら簡単な問題をパパッと解いて終わるかあという感じでした。実際のところ簡単なA,B,C問題をパパッと解いて...

----------2018-11-18-15.52.17

🤔

あれもしかして僕これ本戦行けるとかそういう...?

— mikit☃️ (@m1kit) 2018年10月14日

なんか27位だった。マジかよ...

どうもD問題がチョット難しい問題で9人しかACしておらず、実質C問題早解きコンテストとなっていた中、偶然早解きに成功してしまった。C問題に十字型のタイルで平面充填するといった趣旨の構築問題が出たのだが、traPの夏合宿で十字型のタイルと戯れていたために、充填方法をすぐに思いついてしまったからだろうか。何が起こるかわからないものだ。

やめて https://t.co/S1aZTBclat

— mikit☃️ (@m1kit) 2018年10月14日

友人にはお祝いがてらスプレーをかけられそうになった。こわい。

本戦前

本戦参加は初めてだったし、先輩が「来年初めて参加する人に向けての有益な情報を含めよう」と思って書いてくれた昨年の参加記を読んでおくべきだったのだが、存在に気がつかず全く読んでいない。ゆるして。

レポート多すぎて全くaiがかけないのはげる

— mikit☃️ (@m1kit) 2018年11月15日

今年はAI Challengeという2048のゲームAIコンテストも併催されていたので参加したいなあと思っていたのだが、大学のレポートを書いているうちに金曜日の午後9時になっていた。後3時間でAI書けるのかなあとか思いながら10時に寝た。

後に今年のAI Challenge優勝者である偉大なる🌚(saharan)先輩に聞いたところ、1週間溶かしたとのことなのでまあ3時間粘らなくて正解だったと思う。

本戦当日

受け付けは8:45までとメールに書いてあったような

— mikit☃️ (@m1kit) 2018年11月16日

オンサイト初参加だし流れとかもよくわからないから早めに到着することを目指した。

うわー電車が満員だ死ねる

— mikit☃️ (@m1kit) 2018年11月16日

満員電車に負けて8:45丁度に到着した。会場にはもう机にPCをセットアップした参加者がたくさんいた。
到着したら名札が貰えて、そこに座席番号が書いてあったので自分の座席に行くと、隣の席にeiya君が居た。会場には見知らぬプロばっかりだったので、知り合いがすぐ近くに居て安心した。

目指せパーカー

— mikit☃️ (@m1kit) 2018年11月17日

お菓子を食べたりジュースを飲んだりしているうちに本戦開始のカウントダウンが始まっていた。急いでメモとペンを用意した。今年は1400点でパーカーらしく、A-Cの点とDの点を通せば良いということだった。正直500点問題はABC等でも解けることが少ないので厳しいなあと思いながらも、とりあえずパーカーを目標に頑張っていくことにした。

なんでだかよくわからないが、A問題をチラ見しただけでグラフ問題だと勘違いし、面倒そうなのでB問題から着手した。B問題は確率の桁数を求めるような問題だったが、logを取れば良いことに気がつけば後はそんなに難しくなかった。
C問題は携帯電話の料金を最小化するような問題で、これも特に悩むことはなかった。二分探索を使ったのだが、地味に二分探索を実戦で使ったのはこれが初めてだった。
ここまでは30分くらいで解けたのだが、その先A問題でしばらく詰まった。4WA1TLEと嘘解法を信じ込んでしばらく抜けられなかったことがうかがえる。まあ最後は空間計算量を犠牲にしてごり押しした。

この辺りで3時間中半分が終了し、残すは1時間半となってしまった。Aで詰まりすぎか。

息抜きにちらっと順位表を見たのだが、丁度隣で座っているeiya君のB問題への提出の判定が弾かれる瞬間に出会ってしまった。隣の席から険しい空気感が伝わってきた。これがオンサイトなのか....。ちなみにこのことを本戦後に聞いてみたら、NとMを間違えて1ケースだけ落ちていたらしい。

BのWAはNとMを間違えていたのが原因でした!!!!!
ありがとうございました!!!!!
パーカーほしかったああああああ#code_festival

— eiya@プログラミング (@eiya5498513) 2018年11月17日

一方僕はというとeiya君の提出に気を取られて、D問題よりE問題を通している人が異常に多いことに気がつかずにD問題に着手していた。そして案の定無限に闇った。残り45分になってからE問題の方が簡単かもしれないということに気がついたが、時すでに遅し。実装が難しい貪欲法を思いついたものの、実装が間に合わず本戦が終了という感じでした。

結果としてはパーカーのボーダーに500点及ばず、87/100位でした。まあ良い結果ではないけれど、順位表を見ると上も下も青コーダーばっかりなので善戦した方かと思う。

本戦終了後にお弁当を取ることができたので、チキン南蛮弁当を頂いた。あまりにがっついたせいでしゃっくりが止まらず、正面のブースに座っていた他の参加者に変な目で見られた。

お弁当にがっついたらしゃっくりが止まらなくなった

— mikit☃️ (@m1kit) 2018年11月17日

その後は自由時間ということで、マリオカート8やりんごの挑戦状といったコンテンツがあった。僕はというとAI Challengeで勝ち進んでいる🌚先輩を横目に見ながら和スペースでくつろいでいた。くつろいでいる最中にEuclideaという神ゲーを布教されたので、ここで宣伝しておこうと思う。ざっくり言えば定規とコンパスだけで作図する作図ゲームで、最小手数などを考えないといけないのでなかなか奥が深い。(昨日からこのゲームをずっとやっている。)

----------2018-11-18-21.41.06

楽しい時間は(Euclideaをやっているうちに)あっという間に終わってしまい、次は最後のコンテンツ、リレーコーディングだ。リレーコーディングはチームで1台のPCを使い一人一問解くコンテストだ。チームメイトには🌚先輩もいるし赤い人が何人もいるし大丈夫だろうと思って、開始前は机の上にあるレッドブルを飲んでいた。

リレーコーディングが開始した。僕の担当はB問題。ざっくり言うと「経路上で特定の点を通過するかどうか」と言う問題だったのだが、「経路の末端が特定の点かどうか」と問題文の趣旨を勘違いして提出してしまい、1WA。頭が悪いし申し訳無さすぎる。気を取り直してコードを修正し提出するも、何故かまたWAで落ちる。B問題で2WAは流石にやばいやろみたいな感じになり、赤い人が見に来たと思ったらコーナーケースはこの時だよと言って立ち去っていった。流石プロ過ぎる...。PCが空き次第修正しに行こうと思っていたのだが、ここでレッドブルによる尿意に襲われる。10分程いち早く修正してACしなければならないと言う気持ちと、早く尿意から解放されたいと思う気持ちの板挟みだった。PCが空いた瞬間、尿意のお陰か驚くべきスピードで修正を果たし、ACしたのを確認してトイレに駆け込んだ。2WAもしてチームメイトに迷惑をかけてしまって申し訳ないのだが、トイレに行った後の達成感は相当のものであった。その後はほとんどやることがなく、I問題の嘘貪欲を考えたり、プロが5分でF問題を通しているのを見てすごいなあと思ったりしていた。

我々のチームは惜しくも優勝を逃したが、6完することが出来た。赤い人達が束になるとあんなに早く解けるんだなあ・・・。上位3チームには景品としてたかそうなお肉(夕飯)が贈られた。入賞を逃したチームにも、高級肉ではないにしろ美味しい夕飯が振る舞われた。🍣🍕🍖あたりはもちろん、ラザニア、デザート、焼きそばなどなど大量にあった。マジな話僕はコレのために本戦に来ているといっても過言ではない。学生の身だと🍣🍕🍖なんて滅多に食えないし、親の金や自分の金で食うよりも企業の金で食う方が何倍もウマく感じる。

総評

たまたま予選突破出来ただけで服を何枚も貰え、記念品も沢山貰え、美味しい物を腹いっぱい食べられたので本当に出てよかったと思う。コンテストfinalでは少々残念な結果に終わってしまったが、来年は賞金が貰えるぐらい頑張りたい(厳しい)。リレーのチームメイトの皆さん本当にごめんなさいと言う気持ちをバネに、精進していきたいと思う。

こんな駄記事、もとい駄参加記を読んで頂きありがとうございました。~~この記事は「来年初めて参加する人に向けての有益な情報を含めよう」と思って書いたため、~~途中冗長に思えた点があるかもしれません。申し訳ありません。全強赤コーダーが問題を解きまくるのを想定していた方もごめんなさい。「弱小水色コーダーでも実際出場してみたらかなり楽しかった」というのが伝われば幸いです。

来年の19から出場者が出たら今度こそは読んで欲しいですね。

mikit icon
この記事を書いた人
mikit

競技プログラミングをB1から始めました。CTFとかもぼちぼち。

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2018年10月30日
競プロだけでは習得しづらいJava Stream API 【アドベントカレンダー 6日目】
mikit icon mikit
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記