りふれろぐ

メモみたいな

ICPC2018 国内予選 参加記

忙しかったので今更になるが、どうせなら残しておきたいので書くことにした。

2018年7月6日、ACM-ICPC 国際大学対抗プログラミングコンテスト(以下ICPC)の国内予選が行われた。
ACM-ICPC 2018 Asia Yokohama Regional

結果から述べると、弊チーム WArabimochi は5完12位で、アジア地区横浜大会に選抜された。めでたい。
国内予選結果 | ACM-ICPC 2018 Asia Yokohama Regional

チーム編成

私はICPCの参加は今回で5回目となり*1、来年からは参加権を失ってしまう。最後くらいはアジア地区予選に進出したかったため、できるだけ強い(というか実力の近い)チームを作ろうとした。

メンバー(チーム紹介より)
  • 私: ねこです よろしくおねがいします
  • はと: はとです バターロールが好きです
  • ばぐ: ばぐです ばぐをうめます

予選まで

とりあえず模擬国内予選に参加し、5完した。ばぐ氏の goto 文が輝いていた。

当日開始前

とりあえずタイピングが一番早いであろうばぐ氏にAを任せて、自分はBを読んで解法を考えることになった。

開始後

3分弱でBの解法が思いついたところで、なんかばぐ氏がAを通してた。どうやらFAらしい。


交代してもらってBのコードを書いたが、なんかバグった。
適当に配列の中身を出力してみたところ、配列のサイズが足りないことが発覚したため、適当にめっちゃ大きく取ったらACした。


その後、Cの内容を教えてもらい、ちょっと考察したら、約数の中で条件を満たすものを求めればいいことに気が付いた。
ばぐ氏に適当に実装してもらってAC。


D問題、制約を見た瞬間に全探索を提案。ただし{ 2^{36} }は厳しそうだったので、適当に枝刈りをすることにした。
私が再帰関数で実装したものの、なんかサンプルの出力すら合わない。原因を探ろうと関数内部でデバッグ出力を試みたところ、そもそも再帰呼び出しができてなかった。
原因がわからず、悩んでいたところ、はと氏からの指摘で、再帰関数呼び出しで関数名を書き忘れるというミス*2が発覚した。
適当に直してAC。


私がDを実装している間に、ばぐ氏とはと氏に問題を読んでもらっていたので、解けそうなFの実装をお願いすることにした。
彼らにFを任せつつ、私は彼らが飛ばしたE問題を読んでみることにした。

少し考えたら、精度が落ちない部分をまとめて足す方法を思いついたので、難航していたFの実装に代わって私がEを書くことに。
適当に実装して、サンプルを入力したところ、なにやら例外を吐いた。

私「浮動小数点例外ってなに?」
ばぐ氏「ゼロ除算」

思い当たる箇所があったので、修正したらなんかACした。


その後ばぐ氏とはと氏はFに取り組んでいたが、残り時間では解けなさそうだと判断したらしい。


終了時間ギリギリの時に、恒例行事としてH問題にEの解答を投げ*3、WAで終了。

終了後

学内1位だったのでまあ間違いなくアジア行けるだろうとなったので、打ち上げで無限に酒を飲んでた。
アイスワインが美味しかった。

さいごに

アジア地区大会もがんばります。よろしくお願いします。

*1:4年前、つまり初めての参加でもアジア地区予選に進出していた

*2:括弧の中に引数だけ並べると、コンマ演算子と解釈されてコンパイルが通るらしい。悲しい。

*3:去年の国内予選でばぐ氏とはと氏はこれをやった