Educational Codeforces Round 48

スポンサーリンク

A. Death Note

累積和をとれば各日までに使ったページ数が分かります.

B. Segment Occurrences

occurrence の始点をすべて求めておくと,クエリは区間内のそのような点を数える問題になります.

C. Vasya And The Mushrooms

$a_i$ や $ia_i$ などの累積和を準備しておきます.

初手は 2 通りあり,初手に右に行く経路は一通りだけです.この経路の場合は累積和の前計算のっもと $O(1)$ 時間で計算できます.

初手を下・右と進んだあとは列数がひとつ減った同じ形の問題が残るのでこれを再帰的に計算します.

D. Vasya And The Matrix

$(x_1,y_1), (x_1,y_2), (x_2,y_1), (x_2,y_2)$ に定数を xor するという操作を考えると,最初の行・列にしか値がない場合に帰着できます.A, B の総 xor が等しいということが存在条件になることもわかります.

E. Rest In The Shades

クエリ点から光源区間を見たとき通る OX 軸上の区間と,入力区間らの交わりの長さを求めればよいです.区間が交わらずに並んでいるので,高々 2 つを除いて完全に左側・内側・右側に来ます.内側の長さ和を累積和で求め,例外となる高々 2 つは計算します.

F. Road Projects

たいていの場合は最短距離が増えないような辺を足せます.パスに含まれない辺を $2$ 回たどれる場合です.非自明なのはパス上の各点に高々ひとつ辺がついた形の場合です.この場合に追加辺を通るパス長の最大値を求めておきます.追加辺が長さ $0$ のときだけ計算すればよいです.あとは適当な累積 max などを持てば計算できます.

G. Appropriate Team

まずペアが good かどうかの判定ですが,これは素数ごとに判定できます.$a,b,x,y$ が与えられて $\min(a,v)=x$ かつ $\max(b,v)=y$ が存在するかということを考えればよいです.$x\leq a, x\leq y, b\leq y$ などの必要条件のもと,$x=y$ なら常に存在($v=x$),そうでなければ $a=x$ または $b=y$ というのが条件です.

よって $X\mid Y, X\mid a_i, a_j\mid Y$ の必要条件のもと,各 $Y/X$ の素因数 $p$ に対して $a_i$ と $X$,または $a_j$ と $Y$ の $p$ で割れる回数が等しいということになります.

素因数全体の集合を $S$ とすれば,集合 $A_i, B_j$ が与えられて $A_i\cup B_j=S$ となる $(i,j)$ を数える問題になります.(制約内で $|S|\leq 15$).

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