Codeforces Round 426

スポンサーリンク

A. The Meaningless Game

ある素因数が含まれる回数を $a,b$ とすると,$a\leq 2b$, $b\leq 2a$, $3\mid a+b$ という条件になります.したがってもとの設定になおせば $a\mid b^2$, $b\mid a^2$, かつ $ab$ は $3$ 乗数というのが条件になります.

B. The Bakery

素直な dp を考えます.$1$ ステップ分の遷移を行う dp を $K\leq 50$ 回行います.$j$ をインクリメントしながら $arr[i] = dp[i] + cost(i,j)$ を管理してその max をとることを考えると,区間加算と最大値のとれるデータ構造があれば十分です.

C. Ever-Hungry Krakozyabra

例えば $[123,456]$ を $[123,199]$, $2**$, $3**$, $[400,456]$ のように分けて,さらに $[123,199]$ を $[123,129]$ と $13*$, $14*$, $\ldots, 19*$ のように分けていきます.「すると prefix が決めっていて suffix がいくつか決まっていない」という状態 $O(keta)$ 個が得られます.

あとは未定の suffix の個数が多い方から順に伝搬させていきます.最大の状態数は要素数 $18$ 以下の multiset の個数程度で多少高速化すれば通ると思います.

D. Red-Black Cobweb

重心分解の練習問題です.重心分解で根を通るパスを調べる問題に帰着します.$x[i] + x[j]\geq 0$ かつ $y[i]+y[j]\geq 0$ であるような $(i,j)$ に対して ANS に $a[i]a[j]$ をかけてください,ということになります.

E. Caramel Clouds

何かの切り替わる時刻すべてについて,その時刻までで得られる最大の日光を計算します.これが計算できると,間の時刻のところの最大値も分かります.なぜなら間の時刻では最大の日光というのは傾きが $0$ または $1$ の 1 次関数の max だからです.クエリに答えるパートも簡単です.

時刻について座圧しておきます.各時刻が何枚の区間でおおわれているかを予め計算しておきます.また $1$ 枚,$2$ 枚である部分についてはどの区間で覆われているかもとれるようにしておきます.

考慮すべきパターンは以下の通りです.得点とは覆われている場所がなくなる長さを指します.

  • 1枚だけから得点を得る.
  • 2枚の区間の共通部分からの得点がある
  • 2枚の区間から独立に得点を得る(共通部分からの得点はない)

最初の 2 通りでは,戦略が $O(N)$ 通りしかありません.第 3 の戦略では,ある区間の始点までで第 1 の戦略から得られる得点の最大値を初期値と考えればよいです.

$O(N)$ 通りの戦略のスコアを持ちながら時刻を進めていけばよいです.ある区間ではある戦略に対する加点を行うか,全戦略に対する加点を行うかの 2 種しかなくて,点更新と max のとれるセグメント木があれば十分です.

コストが $C$ 以下という点については,まず $1$ 枚のコストがこれを超えているものは区間の枚数が $3$ 枚以上覆われていることにすればよいです.$2$ 枚のコストについては第 3 のコストの初期値を計算するために,区間をコストでソートしておくと,セグメント木の区間クエリで対処できるようになります.

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