AGC063

2完。昨日よりはいいけどやっぱり微熱は残っていた。コンテストが始まると問題ない感じで、体温はだんだん下がっていた。後半は、休んでいたのと同等の進捗しか生んでいないが、疲れきってヘトヘトになった。

A - Mex Game

少し前にもmexを使うゲームあったけど、その数を選んでしまえばその数がmexになることはないんだよね。ということで、相手の文字がある場所を小さい順に取っていく貪欲を思いつく。最終手では2箇所から選ぶことになり、数が小さいところほど重要そうで、しばらくいじってよさそうなので実装。mexの値は単調増加なので、mexの計算は全体でO(N)でできる。

まともに戦うなら未証明ACするしかない。自分よりはるかに強い人のためのコンテストであることがよくわかる。

B - Insert 1, 2, 3, ...

1213423のように絡まってはいけない。括弧列のような雰囲気を感じる。先頭や末尾の性質を調べて、しゃくとりみたいのを考えて、結局先頭から見ていってそこが終端になるのが何通りあるかを計算する方針に。最初はBITを持ち出したけどよく考えるとそういうのじゃない。基本的には123みたいのしか使えなくて、そうじゃないときは対応する相手を探す必要がある。ここで、121234は[12][1234]とも[12[12]34]とも解釈できる。いくつか試して、常に前者と解釈してそれによって成立しなくなることはなさそうだと思い、まあ難しすぎてそう思うしかないので、そのように実装していく。123のような塊を末尾の数で特徴付けしてスタックで管理、ロールバックできるようにする。3が相手として12を欲しているならその区間はもう開始地点として使えない。実装が複雑すぎて一旦あきらめかけたが、簡単な実装があるはずと落ち着いて単純化を考えると書けるレベルになった(昨日のABCの反省が生きている(ただの運かも))。スタックにはインデックスではなく塊の末尾の数を入れて、欲しいものがくるまでpopしていく。対応できないクソでかい数が来たらそこで断絶、ここでスタックサイズは0になる。

それっぽい解法を見出してACを奪うしかないんだけど、まあわりと運がよかったと思う。実装は、昔のAtCoderみたいでよさを感じていた。最近のAtCoderって前と全然違うよね。提出するコードの色っていうか。

C - Add Mod Operations

同じ数を違う数に分けることは当然できないが、違う数を同じ数に潰すことはできる。全体をずらすことはできるし、1 2 3 4 を 1 2 3 10 みたいにでかい数を作ることもできる。操作としては回しながらという雰囲気だが、100 200 340 567 を 1 2 3 4 にするみたいなとき、広がってるものをまとめる必要があり。N回だから1つずつ合わせていくと思うんだけど、潰しながらまとめながらできるのかあ?2つの数を同じにしたいとき、1 2 3 4 を 0 1 2 5 にして 0 1 2 1 にすると最初の1と3を同じ数にできた。手数がかかっているし、この操作で他の情報が潰れないかも心配だ。さすがに、自明にできないもの(これを把握できてない可能性はあるが)を除いてできるのだと思うが、できる気がしない。手数無制限の実装とかやるべきだったんだろうけど、できなかった。難しすぎて体が動かない。