結果
順位 111th / 5166 パフォーマンス 2214 レーティング 1877 → 1916(+39)
A - Weather Prediction
頭が悪い実装方法でタイプミスが怖かったが、そのときはCLionが指摘してくれるだろうと信じてやった。
B - Tap Dance
こういうの条件間違えそうで怖い。
C - Attack Survival
全員即点減点させて各問題では正解者のみに1点増やせば良いというのを、感覚でそういう感じというノリで実装。C問題ならそれで合う。
D - Powerful Discount Tickets
基本的にはstd::priority_queue
に全部貯めて、「1個取り出して2で割って入れる」という操作を回やれば良いんだろうということにはすぐ気づくが、具体的にどうするかでやや悩んだ。
最初は毎回2で割って切り捨てていくと値がズレそうだと思って、double
では精度がダメそうだなぁとか、std::pair
で初期値と割った回数を保持するとかでは順番の計算が大変かとかを考えた。が、なんか少し試していくと割って切り捨てを繰り返しても最終的な値が変わらなさそうだということがわかってきたので無証明のままそれで実装してAC。解説PDFには証明があるが、あーまーそうなのねという感じであまりピンとは来なかった。
E - Who Says a Pun?
Zアルゴリズムで殴って勝ち。文字列アルゴリズムは去年のJAG合宿で多少ライブラリを整備したのでそれが活きたわけだけど、これで早解きできてパフォーマンス高いというのもなんだかなぁという気持ち。
F - Xor Sum 3
大きい方の桁から決定していくんだろうとか、そもそも1が立っている数が奇数ならどうしようもなく1が立ち、偶数なら1, 1で分けたくなるとかそのへんのほぼ自明なところはわかったけどそれ以降さっぱり進まず。掃き出し方なんですか。はぁ。動画を見てなんとなく雰囲気を察して実装。これは思いつけない。