Codeforces Round 1116

ブログにも解説を載せるのは,2026/08 中くらいにします.ちょっと管理や,自分のための検索資産としていまいちなので.

カテゴリページ → https://maspypy.com/category/codeforces

のお知らせも見てください.


A. Hot Potatoes at the Fairy Warehouse

難しいし,未証明.

最終手以外そのまま持っておくものを実装するとサンプルが合うので提出?

B. A Ribbon for Tomorrow

連長圧縮したときの連結成分数が不変量になります.各 $0,1$ を指定の成分数に切り分ける方法をかけるだけでよいです.

この設定はたまにあって,無向辺 $(a_i,a_{i+1})$ の multiset が不変量になります.最近だと ARC216E であったタイプですが,他にも結構あったはず.

C. Even If the World Turns

難しい.

幾何で $2$ 次元点群を回転したり平行移動したりして,元の点群との対応をとれますか?みたいな設定のときに,点群の重心が保存量になります.それと似た発想で,black cells の重心が $x$ となるようにしました.特に invert が非自明なんですが,座標の総和と点の個数がどちらも mod n で $-1$ 倍になることから上手くいっています.

D. How Long Until Nothing Remains?

逆操作を考えると,

  • 毎ターン $2$ 倍される.そのあとで好きなインデックスひとつに $+1$ できる.

ということになります.これを踏まえて二分探索判定問題を考えると,$K$ ターンの判定では,

  • $k=0,1,\ldots,K-1$ に対して,ひとつのアイテムに $2^k$ を足すことが可能

ということになります.これを,$k=K-1,\ldots,1,0$ の順に処理します.この際,貪欲に最も必要量の大きなアイテムに対して割り当てていってよいです.これはちょうど今日 ARC226B のユーザー解説に書いた貪欲法と理屈です.

E2. What Will Remain at the End? (Hard Version)

大変.

モノイドを作って dual segtree に流し込んで終了.という解法でできます.要するに,

  • $x$ に何かを代入
  • $x$ の $\pm 1$ 倍
  • $chmax(x,0)$
  • 列への $x$ の追加

という操作列を何らかの情報に集約して,操作列を結合したり,結合した情報から subarray max を取り出したいということです.

まず,$M$ を subarray max 用のモノイドとします.

簡単のため,操作列の中に「代入」があるとします.

…[代入]………

この操作列を最初の代入のところで左右に分けます.

…    |    [代入]……

すると,まず後半は次の形に圧縮できます.

  • 列に追加された要素からなる列からできるモノイド $M$ の元
  • $x$ が最終的にどういう値になるか

さらに,前半の計算はすべて初期値 $x$ に比例するため,次を持てばよいです.

  • 初期値が $x=1$ だと仮定した場合の,モノイド $M$ の元および,$x$ の最終値.
  • 初期値が $x=-1$ だと仮定した場合の,モノイド $M$ の元および,$x$ の最終値.

これで合成できます.代入がない場合も,$x=\pm 1$ 用の何かだけ持ちます.結局,$3$ つの $M$ の元の組という感じでモノイドが設計できます.

F. Who Will Witness the End?

まだ

CodeForces
スポンサーリンク
シェアする
maspyをフォローする
maspyのHP
タイトルとURLをコピーしました