HTTF2020本選に参加しました

今回は12/7にフューチャー株式会社さん主催で開催されたHTTF 2020の本選の参加記を書いていきます。
f:id:yuji9511yuji:20191210213503p:plain:w300

HTTF2020とは

HACKING TO THE FUTURE 2020という名前のコンテストで、マラソン形式のコンテストです。何週間か前に予選が行われ、そこでいい順位をとった50人がフューチャー株式会社さんで開催された本選に参加しました。
新卒枠、地方枠、Youth枠などいろいろな条件があったのでいろいろな畑の人が幅広く本選に参加していました。

予選

8時間のハーフマラソンみたいな感じでしたが、マラソンというよりアルゴリズムによった問題で、マラソン経験があまりない自分でもそこそこのスコアを出すことができました。
順位はそこまで良くはありませんでしたが、新卒枠という最強のカードが使えたのでなんとか本選に参加することができました。

本選が始まるまで


なんかいきなり不穏なツイートを見ました。この辺りからすでに異変は始まっていたのかもしれないですね。
問題を見るとわかるのですが、確かにテーマ的にビジュアライザが使いづらいタイプの問題でした。
ちなみに今回もらえた布類はウィンドブレーカーでした。あまりもっていないタイプのやつだったので使い勝手が良さそうです。

本選1開始 (10:30 - 14:30)

なんで本選に1がついていて、なんで4時間で終わっているのかは読み進めていけばわかります。
atcoder.jp
簡単に問題の概要を説明すると、1000個程度の頂点が存在してそれぞれの点の間に辺を張れるかが指定されています、この中の頂点を使って指定された木構造をいくつ含むことができますか、といった感じです。予選と同様あまりマラソンっぽくない雰囲気がしますね。
問題文が割と長く、出力がvalidな条件も比較的厳し目なので開始直後はしばらく正の得点が出ていませんでした。
ただ、問題の条件を読んでいたところ、案外制約が緩く、比較的点数が出しやすいのではないかなとなんとなく見当をつけていました。

異変が起こったのは開始90分を回ろうとした時でした。
みんなが騒ぎ出しました。「満点が出たぞ。」と。
アルゴのコンテストならいいのですが、これはマラソンです。満点などそうそう出るはずがありません。しかもコンテストはまだ6時間半も余っています。
同点の場合は早い順に順位が決まるはずなので、残り時間であがいたところで抜かすことはできません。
やはり異常事態だったらしく、まもなくしてchokudaiさんが会場に現れ、状況の説明とともに本選2の開催が発表されました。
元々8時間だった本選を4時間で終え、そのまま本選2を開催するということです。
問題の大枠を変える時間はないので制約を厳しくして点数を抑えるといった変更を加えるそうです。

当然この状況はメンタルに大きく響きました。少しでもスコアをあげようと努力していたところに満点が出たと言われたらそりゃ動揺しますよね。
ただ、現在のコンテストも賞金などは変わらず与えられると言っていたので、気持ちを切り替えて頑張ろうと思いました。

それから30分ほどして、ある一つの点から貪欲に頂点を増やしていくという至極単純な実装をしていたところやけに上手くいっていることに気付き、ビジュアライザに投入してみるとスコアには100000(1ケースの満点)の文字が。
これはもしかして満点が取れるやつなのではと思った瞬間鼓動が爆速になりました。とりあえず心を落ち着かせて提出して様子を見守っていました、すると...
f:id:yuji9511yuji:20191209200506p:plain
満点!!まさかこんなにすぐに出るとは思っていなかったのでとても驚きました。でもみんな結構解き終わってるんだろうなーと順位表を見にいくと...

f:id:yuji9511yuji:20191209200351p:plain
えっ4位!!??
まさかオンサイト初入賞and初賞金がこんなタイミングで来るとは思っていませんでした。とりあえず2時間ほど時間が余ってしまったのでほわ〜んとした気持ちで配られたお弁当を食べていました。

解法について話せない状態で昼ごはんを食べながら他の参加者と懇親していたのでなんだか本質を話せない歯痒い感じのコミュニケーションをしていました。

本選2開始 (14:30 - 18:30)

本選1から間髪入れず本選2が始まりました。先ほどより構築すべき木の頂点数が増え、頂点同士が繋げづらい制約になっています。
先ほどと同様のコードを投げたところ、満点の3割程度のスコアしか出なかったためいろいろ修正を加えました。
具体的には頂点を強い頂点から順にとっていく、木の頂点数が少ない順に使う、開始頂点をいくつか試して最もスコアが出るものを採用する。ランダムに根を選び直して時間の許す限り木が挿入できないか試す、あたりでしょうか。
そこまでクリティカルにスコアが上がったものは少なかったですが、じわじわとスコアを上げていき300万点(全体の6割)ほどになったところでスコアが上がらなくなりました。中盤は賞金圏内でしたが後半どんどん抜かれていき最終的には全体17位で終了しました。やはりスコアを改善していく部分でマラソン的立ち回りに慣れていないのでその部分で負けてしまった気がしますね。

制約が厳しくなった本選2ですが、今回も満点が2人出ました。ただ今回の満点は難易度が相当高いので素直に尊敬します。

懇親会

8時間のコンテストも終了して懇親会が始まりました。いつもと違いマラソンの本選であること、Youthなどの枠があることもあり普段とは違ったメンバーが集まっていたのでいろいろな方と話すことができました。
ご飯はすごいたくさんの種類が用意されていて、しれっと美味しいシャンパンが置いてあったりと内容もなかなかに豪華で満足度が高かったです。

懇親会中に結果発表が行われました。本選2がメインとなったコンテストだったので本選1の方は比較的さらっと流されてしまいましたが、それでも初めて入賞という経験をしたのでとてもうれしかったですね。金額が書かれたプレート的なやつを持つという実績を解除できました。ちなみに1位だった方はどちらのコンテストでも満点をとってどちらも優勝していました、さすがです。

懇親会の後にはあらかじめ飲みに行こうと言っていたメンバー+αで二次会に出かけました。あとで考えたらみんなレート青以上とかだったのでレートの高い飲み会だなーと思いました。今年の競プロ界隈での流行語の話とか面白かったです。1位は満場一致だったのでみんなで2位や3位の予想が行われていました。結構遅くまで飲んでましたが無事終電で帰宅できました。

まとめ

本選1での入賞なのでなんとなく自慢しづらい感じになりましたがとりあえず入賞は入賞なのでよかったです!
最近オンサイトの予選で冷えがちなのでこれからもオンサイトにたくさん出れるように精進していきたいと思います。
とりあえず目先の目標はAtCoder黄色ですね。あと+34で黄色なので頑張ります!
f:id:yuji9511yuji:20191210212926p:plain