AtCoder Grand Contest 045

※1問も解けていないので、解説的なものを期待しているなら、以下は全く読む価値ないです。
 どのようなことを考えてハマっていたかだけが書かれています。

コンテスト前のレート:1818
レート通りのパフォーマンスが得られる順位:427位

A - Xor Battle

問題
思いついた案は制約に収まらなそうなものばかりで何もできず。
20分ほどかけて解けなかったのでスキップ。

思考過程
  1. ビットごとに見た場合、最後に当該ビットが1になるのが、S_i=1A_iよりも、S_i=0A_iの方が後ろである場合は0にできる。
  2. ただ、ビットごとに独立ではないので、他のビットに引きずられるところをどう判定すれば? →わからない
  3. 後ろからS_i=0A_iだけ見ていって作れる数の集合X_iと、前からS_i=1A_iだけ見ていって作れる数の集合Y_iを比較して、常にX_i \supset Y_iならば0と判定できそう。 →集合に含まれる個数が最悪min(2^N, A_{max})くらいになると思い、ボツとする

上記のX_i解説DP[i]が概ね同じものに見えるけど、何で計算量が問題ないのかは全然わからない。


B - 01 Unbalanced

問題
A問題をスキップした後の2時間をほとんどこれに費やしたが解けず。

思考過程
  1. 最初から最後まで01を交互に配置するのが最善で、その時の答えは1
  2. 例3を見ると、後ろの方の"11?111"の部分が最悪で4となる模様。
  3. 例3では、前半の0が多いところは?を主に1にして、後半は逆になりそうだが、前半に1にし過ぎたら後で0が足りなくなるなんてこともありそうで、貪欲で簡単には決まらない気がする。
  4. 答え決め打ち二分探索をして、特定値を超えないように操作できるかどうか判定することはできるか? →答えを決め打たないよりはまだできる見込みありそう
  5. 0だと+11, ?だと-1(ただし最小値は0)する0カウンターと逆の1カウンターを用意し、それぞれの最大値を見たりしてみるが、?で両方減らしてるのはさすがにおかしくて35/46ケースしか通らない。
  6. ?を全部+1した場合と全部-1した場合を両方持ったりしてみるが、結局それをどう扱うのがいいのかよくわからない。根本的に考えを変えていくことにする。
  7. 0-11+1とみなして、?で区切って?以外の累積和を取ってみる。 例3だと、-2, -3, -4, -5, -6, -8, -7, -5, -4, -3, -2, 0, 3, 4となる。間の?の数もわかるようにしておく。
  8. この数列を、\pm ansを超える値が出ないように間の?で調整していけないか?

ここまでで時間切れ。解説見ると最後の方針はかすってはいそうな気がする。
?を一旦全部-1にしておいて、可能な限り+1に変えていくとか全然思いつかなかった。
 


C問題も一応少し考えたけど、文章化できるほどの思考過程がないので省略。


終結果:0完、458位、パフォーマンス1337
レート変動:1818→1778

当時緑だった、2019/3/23のAGC032以来の0完でした。