Nebius Round 2 (Codeforces Round 1088)

A. Antimedian Deletion

$N\geq 2$ のとき場所によらず答は $2$ です.どの操作でも,選んだ要素以外の削除が可能なので.

B. Mickey Mouse Constructive

結論として,[1,1,1,1,-1,-1] のように同じ種類を詰め込んだやつが最適です.

総和が $0$ のとき,これで $1$ 通りになっています.

総和が正のとき,総和の約数 $d$ に対して和を $d$ ずつにする方法が $1$ 通りになっています.$0$ 通りにすることはできないので,この構成が最適です.負の場合も同様.

C2. Equal Multisets (Hard Version)

条件を次に分解して考えます.

  • $[1,k]$ 部分が good です.
  • $[i,i+k-1]$ が good ならば $[i+1,i+k]$ も good です.

後者の条件は,「$a_i$ を削除し $a_{i+k}$ を挿入」と「$b_i$ を削除し $b_{i+k}$ を挿入」が等価という条件です.すると,$a_i\neq a_{i+k}$ ならば $b_i,b_{i+k}$ が確定,そうでなければ $b_i,b_{i+k}$ が等しいという条件が発生します.

これらの条件を処理し,最後に $[1,k]$ 部分について考えればよいです.

D. AND-array

各 bit の出現回数だけが問題です.$k=0,1,\ldots,29$ について,

  • ある $m=m_k$ を選び,$b_i$ に $2^k\cdot \binom{m}{i}$ を加算

ということです.

$m_k$ については「$i$ 以下であることだけ分かっている」「確定」の $2$ 種の状態を保持していながら,末尾の項 $b_i$ から処理していくことができます.$b_i$ の処理では,新たに $m_k=i$ となる $k$ の集合を決めてあげればよいですが,これは $2^{30} < \mathrm{mod}$ から可能ならば一意に決まります.

E. Minimum Path Cover

計算量を問わなければ,

  • subtree $v$ での ANS
  • ANS を達成する場合に,$v$ を通るパスの gcd としてありうる値全体の集合

という組を順に確定させていくことができます.しかし,gcd 全部持ってしまうと約数が膨大にある場合に計算量が爆発です.

次に,gcd の候補としては実際にはその素因数だけを考えればよいという解法が考えられます.でもこれも素因数分解が重いのでダメ(たぶん)です.

その中間的なことをします.

  • $A$:候補集合
  • $A$:$A$ の要素は互いに素
  • 出てくる gcd の素因数として可能なのは A の要素の素因数だけ

というような集合 $A$ を作ります.すると $|A|$ は常に小さく抑えられます.これを実現するには,$x$ を追加するとして,「$g=\gcd(a,x)>1$ となる $a$ があれば,$a,x$ を $a/g,x/g,g$ にとりかえてよい」というようなことをします.総積が $g$ で割られているので適当な回数で反復が終了します.

F. Learning Binary Search

二分木を作っておきます.各頂点 $v$ に対して,「$v$ で探索が終わる $a$ の個数」を数えます.

これは,「単調増加列 $a$ であって,$a_l < a_v$, $a_v < a_r$ を満たすものの個数は?」という形です.$l,r$ は根からのパスが通る $v$ より左・右の頂点の最寄りです.$l,r$ の条件は存在しないこともあります.

両方の条件がある場合の数え上げは,「$a_l=\cdots=a_v$」「$a_v=\cdots=a_r$」という条件について包除すればよいです.

G. Rational Bubble Sort

大量に操作を行うと,ほぼ定数列になるが,微小な差分が残ってしまう.という設定です.

まず,総和が $0$ であるように変換して考えます.

  • 十分条件 1:末尾が正ならば good である
  • 十分条件 2:ある prefix sum が負ならば good である

十分条件 1 を示します.手前 $N-1$ 項に十分大きな回数の総和を行いまくります.すると状況としては,「$(0,0,0,0,0,1)$ に微小な摂動を加えたもの」と同じような状況になります.この状況から $i=N-1,N-2,\ldots,0$ に操作をすれば目標達成です.

十分条件 2 は,suffix sum が正となっているので,そこに対して十分大きな回数の総和を行って平均化して十分条件 1 に帰着すればよいです.

十分条件から解けていない問題を考えると,これは prefix sum $S_i$ がすべて非負の場合ということになります.

できる操作は,$S_i := (S_{i-1}+S_{i+1})/2$ です.

この過程で $S$ は負にできないので,全部 $0$ にできますか?という問題です.「$0$ であるか正であるか」という $2$ 種の情報に落として考えることができて,あとは簡単です.

H. Median Deletion

まだ

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