みんなのプロコン 2019 予選

A - Anti-Adjacency

oxoxoのように選べばいい。いつもと違ってYesじゃなくてYESなので少し時間をロス(問題をよく読まずYesであるほうへ賭けたが負け)。

B - Path

グラフは木だが、棒みたいになってるか(あまりいい表現じゃないな)という話。サンプルを見ているうちに、同じ頂点が3回現れるかどうかで判定できそうだと気づく。証明は浮かばないが、しつこく図を描いて他になさそうなのでそれで書いた。1分で証明できないの弱い。ていうか一筆書きの話になるんだなあ。

C - When I hit my pocket...

最初サンプルの説明が間違ってて、変だと思ったら更新で直るのが定番になってる。1円に交換するというのがわかりづらい。2ターンかけてA枚をB枚に増やすことだと気づくのにかなりの時間がかかった。そこに気づけば、あとはB-Aが2より大きくA枚まで増やせるケースがメイン。メイン以外を処理してから、オーバーフローに注意して計算。ビスケットがなくても「持っているビスケットを叩き、1枚増やす」の操作で増やせるのに、最初から1枚持っているというややこしすぎる設定だった。ここまで、WAを出さないよう慎重に動いていた。まずはいい立ち回り。

D - Ears

読むのがけっこう大変。この異常な問題文はこのwriterだなと思う。要するに、一筆書きで1ずつ増やしてAにできるだけ近くしたい。始点と終点が同じなら簡単で、好きな正の偶数を作れそう。同じと限らない場合は、ある区間でそこから1を引ける。累積和っぽさを感じる。仮にAが0か1だとすると、1の個数-0の個数が最大になる区間を求めればいいので、0を-1にしてそこまでの和の最小値を更新しつつ現在の和との差の最大値を更新していけばいい。

ここまで来ると、0が続く区間の扱いが問題だという空気になっている。0が続いて1か2損するけどその先に大きい値があれば取りたい。しかし、0が続いて損するのが2固定ではないのがきつい。訪れる区間が変われば奇数回訪れる区間も変わる。無理だ。区間を2つ決めないといけない。4つも変数がある。2つならいける、3つも工夫すればなんとか?でも4つは無理だ。座標0を訪れると仮定すれば、両方の区間の最善を更新しながらいけそうだが、それを両側からやればというのはさすがに嘘だろう。奇数回訪れる区間の動きもけっこう規則性あるしなんかあるのかなあ。しかしこんなに多くの人が比較的短時間で通している理由が全くわからない。そもそも、0を特別視するのが解法っぽくない気はするが、そう思っても、そうじゃないと思っても、解けない理由しか出てこない。

体調は良かった。立ち回りは?開始50分くらいの時点で、EやFを読んでもよかった。心に余裕がなかった。昼間ずっと寒かったもんなあ。コンテスト中は熱が出るでもなく全然寒くもなかった。解けないのはつらい。もう自分はコンテストを楽しめないのかもなあ。