ARC105

ABDの3完。昨日と違って落ち着いたプレイをしていたが、Dを提出するとき2回ともめっちゃドキドキしてしまって恥ずかしい。

A - Fourtune Cookies

16通り全探索(1枚以上選ぶ必要があるが0枚選んで半分になることはないので)。

B - MAX-=min

見るからに最大公約数。順位表を見てペナが少ないのを確認してから提出。

C - Camels and Bridge

CとDを交互に考えていた。

短いほうがラクダをたくさん乗せなくてよくて有利。耐荷重は当然大きいほうが有利。よって、あるパーツと比べてより短く耐荷重が大きいものは考える必要がない。ラクダたちの部分集合の重さは高々2^N通りしかないので耐荷重の値も256通りにできる。でもMがでかいからなあとか思ってた。2^Nは掛かってもいいけどN!はなあという感じで。小さいグラフで行けそうな気もしたが具体的には何も浮かばず。D問題よりは解けそうな気がしたけど実装がかなり重くなる予感がしたので途中からはあまり力を入れて考えなかった。

D - Let's Play Nim

ニムだなと思って問題名を見るとそう書いてあった。一応ニムとGrundy数についてググったが、ニムの解説だけ読んでGrundy数については読まないことにした(結果的によかった)。コインが入った袋が存在するときは2番目の操作ができないの知ってるけど忘れがち。つまり、最後に1番目の操作をしてxorが0なら勝ち(それ以外は負け)。N=1とN=2は簡単なので場合分け。そうでないとき、1番目の操作の最後にxorを0にしようとしても、その直前の操作で小さくない袋を取られ空いた皿に移すか既にコインがある皿に足すか選択されて阻止されてしまうと考えた(小さな具体例をたくさんいじった結果)。簡単すぎる気もするが、とりあえず投げてみる。WA。

大量WAでびびるが、たくさんのテストケースがあるんだった。さて、阻止できないケースがあるということだ。一体どんなケースだ。ふと、Nが偶数のときを思う。奇数のときを中心に考えていた気がする。同じ数が2個ずつあったらどうだ。後手は合わせていく。場に同じコイン数の皿が偶数個あるようにできる。相手が空の皿を選んだら自分もそうする、どこかに足したら同じ数の皿を選んで自分も足す。とりあえずこれを実装して提出。AC。他のケースはないんだな(は?)。