Codeforces Beta Round 74

スポンサーリンク

A. Robbery

隣接する項の和が変わらないのは,全体として,偶数番目に $+x$,奇数番目に $-x$ したというときのみです.

B. Widget Library

気合実装です,頑張りましょう.

C. Chip Play

全点を始点としてシミュレーションします.$O((nm)^2)$ 時間.

常に,それぞれの生き残っているマスから $4$ 方向にある最寄りの生き残っているマスを保持するようにすると,削除操作も次の点の発見も $O(1)$ 時間で行えます.

D. Space mines

ちょっと読解難ですが単純な幾何問題です.等速直線する球体が,球と線分の和集合にぶつかる最小時刻を求めるというもの.球の場合も線分の場合もどちらも適当な 2 次方程式で計算できます.

E. Fire and Ice

LR 列から操作列を復元しようとすると,RRRLLL → ARARARALLLA,RRLRL → ARARALAARALA のように,「R を AR に置換」「LLL…L の前後に A を挿入」のようになります.

だいたい次の問題になります.

  • L, R 列を作れ.各線分を L によって通る必要のある最小回数が与えられる.R のコストは 2,L のコストは 1,RL がこの順に続くとコスト 2 である.

私は R のコストを $4$, RR のコストを -2 として計算しました.

各線分を通る回数を決めます.終点の手前では (L,R) = (n,n+1),終点以降では $(L,R)=(n,n)$ の形になります.これらそれぞれのつなぎ目で R 同士をなるべくマッチさせる($x,y$ 個あるときコスト $-2\min(x,y)$ である)として dp によりコストを最小化します.

復元は,R 方向の移動を結合させたあとで Eulerian walk で出来る(L 辺があるので連結性が保証される).と思ったのですが,L 方向の移動が $0$ 回のところで問題が生じたので,R 方向の移動を結合するときに少し注意が必要でした.

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