Codeforces Round 1003

スポンサーリンク

A. Skibidus and Amog’u

最後の 2 文字を消して i を追加.

B. Skibidus and Ohio

1 回操作可能ならば長さ 1 になるまで操作可能です.「操作後も操作可能な場所が残るように操作する」ことを繰り返せます.

C2. Skibidus and Fanum Tax (hard version)

$i$ 昇順に貪欲に決めます.手前の項以上であるという条件が成り立つ中で最小のものに変換するようにします.

D. Skibidus and Sigma

$2$ つの隣接する列の順序を入れ替えたときの変化量を計算すると,総和の昇順になるようにソートするのが良いことが分かります.

E. Skibidus and Rizz

最小になるパターン(0, 1 の交互)と最大になるパターン(000111)の間のパターンを適当に作ります.00001010101111 みたいな形を使います.

F. Skibidus and Slay

長さ $n+2$ の列に過半数の要素があれば,先頭 $2$ 項または末尾 $n$ 項にも過半数の要素があります.よって,存在判定は長さ $2$ または $3$ のときにやれば十分です.(長さ $3$ のときだけもだいたい大丈夫だが $n=2$ では失敗する)

G. Skibidus and Capping

$2\leq a_i$ があるので少し作業量が減ります.

$a_i=a_j$ のパターンとそうでないパターンで場合分けをします.後者は $(p,q)$ または $(p,pq)$ または $(p,p^2)$ です.

H. Bro Thinks He’s Him

状態数 $O(1)$ の dp で解けます.

  • 列の末尾が 0 であるような列に対する cnt, sum (sum は ans の sum)
  • 列の末尾が 1 であるような列に対する cnt, sum (sum は ans の sum)

dp の遷移は $5\times 5$ 行列で書けるため,その合成をセグメント木にのせれば変更クエリと求値クエリに答えられます.

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