Codeforces Round 1107 (Div. 3) 参加記

私です。

Codeforces Round 1107 (Div. 3) に参加しました。4完です。あと2回で入緑できるかな〜?って感じですね。わんちゃんDiv.2を早めの2完とかできたら次で入緑もあるかも?

A~CはPCでDの途中からベッドでスマホコーディングした感じです。


A問題 Divide and Conquer

なんか小難しく書いてますが、つまり x % y == 0 ? "Yes" : "No" 。これだけです。


B問題 Good times Good times

バカ真面目に考えると、どう考えるのかは 知らない のですが、同じ文字列を後ろに結合させると、良い数字は良い数字のままですね?ということは、 xx の桁数を aa をすると、y=10a+1y = 10^a + 1 になるということです。これを素直にパッと出てきたのは成長なのかな?


C問題 RemovevomeR

最初は内側から貪欲に消していくと、うまくいくのでは?と思ったのですが、全然そんなことはなく、外を消していってABAの形に寄せていくケースもあるなぁとなり、棄却…

実験していきましょう。

当たり前ですが、00, 11 片方しかない場合の答えは 11 です。

まず、0011 の塊が完全に分離してると(ex.  1110000ex. \; 1110000)、答えは 22 です。

次に、0011 の塊の片方がもう片方に挟まれていると(ex.  1110001ex. \; 1110001)、答えは 11 です。

これ以降(ex.  110010,  11001001ex. \; 110010, \; 11001001)も同じように答えが 11 になります。(110010110010 のケースでは、11 を消していくイメージで最終的に 00 が残る)

つまり、bitが反転するのが 11 回ならば 22、それ以外は 11 ということです


D問題 An Alternative Way

めっちゃ失礼なんですけど本当に文句が言いたくて、私の英語力?読解力?が低いだけなのでしょうか。問題文なんかめっちゃ読みにくくありませんでした? まぁ、それは良いとして。

問題文を要約すると、配列 AA に対して次の操作を任意の回数行います。

  1. 区間 [l,r]  (1lrN)[l, r] \; (1 \le l \le r \le N) を選ぶ。

  2. すべての i  (lir)i \; (l \le i \le r) に対して、以下のように A[i]A[i] を更新する。

    • ii が偶数なら、A[i]+=1A[i] \mathrel{+}= 1
    • ii が奇数なら、A[i]=1A[i] \mathrel{-}= 1

最終的に、A=BA = B とできるかという問題です。

  • lrl \le r なので、任意の1要素に対して、11 を足し続けることが可能です。ここから、A[i]B[i]  (1iN)A[i] \le B[i] \; (1 \le i \le N) ならば、必ず Yes になります。

  • 操作1回は配列 AA 全体に対して ±0\pm 0+1+1 の変化しか与えることができません。

これらより、i=1N  A[i]B[i]    0\sum\limits_{i=1}^{N} \; A[i] - B[i] \; \ge \; 0 を満たすと Yes になります。


ここで寝落ちので、E問題以降は解けませんでした。

相変わらず、itertools をコメントアウトするのを忘れて CE 出してしまうの本当に良くないなぁ、と思いつつ、入ってない方が悪いという責任転嫁をしながらまたCFに出ようと思います。

それでは、また。