Codeforces Round 1002

スポンサーリンク

A. Milya and Two Arrays

どちらかが $3$ 種以上あれば両者をソートした場合が条件を満たします.両方が $2$ 種の場合も $3\leq n$ より上手くいくことが分かります.どちらかが $1$ 種の場合は簡単です.

B. Cost of the Array

$N=K$ は個別処理.そうでないとすると答は $1$ または $2$ です.先頭に $[1]$ しか持ってこられない場合,$[1,1]$ を持ってくるようにすれば $2$ が達成可能です.

C. Customer Service

mex を $k$ 以上にするには $0,1,\ldots,k-1$ がなくてはいけません.$a_{i,j}\geq 1$ からそれを達成できる場所は,末尾に $0,1,\ldots,k-1$ 個以上の $1$ が並んでいる行だけになります.

D. Graph and Graph

$\dp[a][b]$ を,その状態からスタートしたときに達成可能な最小コストとして,これを小さい方から dijkstra の要領で更新していきます.同じ頂点間に両方のグラフの辺が存在する場合にコスト $0$ というところからはじめます.

$\dp[a][b]$ から $\deg_1(a)\times \deg_2(b)$ だけの遷移をしても遷移数の総和が $m_1m_2$ になるので計算量は大丈夫です.

E2. Stop Gaming (Hard Version)

操作は列へ挿入して末尾削除ですが,挿入可能なインデックスが $m$ の倍数に限定されています.

まず $k$ 回の操作で条件が達成かの判定を考えます.このとき数列の prefix $nm-k$ 項はすべて捨てられずに残ります.それらが最終的に何番目に配置されていればよいのかも確定します($b$ の要素が distinct なので).

それが可能かは手前から検証すれば分かります.挿入が行われるすべての場所について,そこが $m$ の倍数であった時刻が存在するかを確認します.これが $m$ の倍数になる時刻があるならばそのうち最も右側に操作するようにすれば,その操作が他の挿入場所の挿入を妨害することはないので条件を満たせます.

あとはこれをシミュレーションして復元します(やや大変).

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