AtCoder Beginner Contest 141

結果

順位   111th / 5166
パフォーマンス   2214
レーティング  1877 → 1916(+39)

A - Weather Prediction

 頭が悪い実装方法でタイプミスが怖かったが、そのときはCLionが指摘してくれるだろうと信じてやった。

 提出

B - Tap Dance

 こういうの条件間違えそうで怖い。

 提出

C - Attack Survival

 全員即 Q点減点させて各問題では正解者のみに1点増やせば良いというのを、感覚でそういう感じというノリで実装。C問題ならそれで合う。

 提出

D - Powerful Discount Tickets

 基本的にはstd::priority_queueに全部貯めて、「1個取り出して2で割って入れる」という操作を Y回やれば良いんだろうということにはすぐ気づくが、具体的にどうするかでやや悩んだ。

 最初は毎回2で割って切り捨てていくと値がズレそうだと思って、doubleでは精度がダメそうだなぁとか、std::pairで初期値と割った回数を保持するとかでは順番の計算が大変かとかを考えた。が、なんか少し試していくと割って切り捨てを繰り返しても最終的な値が変わらなさそうだということがわかってきたので無証明のままそれで実装してAC。解説PDFには証明があるが、あーまーそうなのねという感じであまりピンとは来なかった。

 提出

E - Who Says a Pun?

 Zアルゴリズムで殴って勝ち。文字列アルゴリズムは去年のJAG合宿で多少ライブラリを整備したのでそれが活きたわけだけど、これで早解きできてパフォーマンス高いというのもなんだかなぁという気持ち。

 提出

F - Xor Sum 3

 大きい方の桁から決定していくんだろうとか、そもそも1が立っている数が奇数ならどうしようもなく1が立ち、偶数なら1, 1で分けたくなるとかそのへんのほぼ自明なところはわかったけどそれ以降さっぱり進まず。掃き出し方なんですか。はぁ。動画を見てなんとなく雰囲気を察して実装。これは思いつけない。

 提出