d0tfi1e’s blog

趣味と日記

ICPC2018参加記

結果としては4完で50位でした。決していいとは言えない成績ですが、個人的には良い大会だったなと思っています。

問題の解法とかは調べたらいくらでも出てくるので、個人的な感想だけを書き残します。

当初のイメージでは、ABを10分程度で片付けて、Cを20分ぐらいで片付けて、そのあと、開始1時間程度で4完して残りの2時間で1,2完して20位ぐらいには入りたいねという感じでした。

しかし、今回のICPCはBを読み始めてすぐ、過去最高難易度のBだ、という感想を持ちました。別に"やるだけ"なんですが、Bのレベルじゃないんですよね。 もう終了してから1週間以上経ちますが、思い出せるだけでも

  1. 折ると必ずしも厚さが2倍にならない
  2. 余分に右にインデックスをとっておかないと右におってセグフォする可能性がある
  3. 余分に上にインデックスをとっておかないと同様にセグフォする可能性がある

という点に気をつけないといけなく、最初は初期サイズちょうどの配列をとったためセグフォ、次に、上下左右に余裕をもたせようとした結果、インデックスの管理が大変になって混乱。よく考えてみると右と上だけでいいし、問題文に記載されている座標のとり方に従えば自然な実装ができるので、かなり回り道をしました。

もともと、一つの配列だけを保持して実装していたのですが、この計算量なら折るたびにコピーしても間に合いますし、絶対そっちのほうがミスが減るので早めにそうするべきでした。

自分にはABCぐらいをさっさと通して他のチームメンバーにDEを考察させる余裕をもたせてあげないといけないと思っていたのでなかなかに焦りました。個人戦だと、「まあ今回たまたま実装で詰まったけどまあ気をとりなおしてこ」みたいに思えるのですが、さすがに団体戦だと自分のミスでチームの振る舞いを壊してしまう可能性があるので、かなり責任を感じます。それでも、自分がBをデバッグ中にCを通してくれたのは本当に感謝ですし、さらにはDの実装(大きさhogeの部分集合を列挙していくタイプの問題)までも他メンバーがやってくれたのは本当に本当に感謝です。

練習時点では、5完前後だったのですが、正直このときは、全部の問題を自分が解いて実装しても(時間はもちろん遅れるのですが)同じ問題数解けるんじゃないかと思っていたのであまり全員でやっている感がなかったのですが、今回の予選は本当にチームメンバー全員の力を集結してこの順位だったと思います(ぼくがむしろ足を引っ張ってしまいました)。

次回に向けての反省としては

  1. テストケースがちゃんと書かれた問題文を印刷する(Chromeで印刷するとテストケースが印刷されない謎の仕様があるようです。練習時点で気づいていたのですが本番はプリンターが遠いこともあり妥協してしまいました)
  2. 不調時の精神コントロール(⌒,_ゝ⌒)

まあ、競プロがんばります