Codeforces Round 698

A. Nezzar and Board

AC する方が証明するよりもかなり易しいタイプ?

すべての $x_i$ に定数 $c$ を加えたとき,生成される数にもすべて $c$ が加わるだけなので,$x_1=0$ としてよいです.

このとき $x$ が書かれているならば $kx$ ($k$ は整数)がすべて作れることが順に確認できます.

$x,y$ が書かれているならば $2ax-by$ のような数もすべて作れます.特に $\gcd(x,y)$ も作れます.ここから $\gcd(x_2,\ldots,x_n)$ が作れてその倍数がすべて作れることが分かります.他の数を作るのは無理です.

B. Nezzar and Binary String

逆順に考えると,次をすることになります.

  • $f$ からスタート.
  • $[L,R]$ 内のうち半分未満を変更する.変更後にその区間は定数列になっている必要がある.
  • 最後に $s$ になれば成功.

半分未満の変更により定数列にする方法は,$0$ 通りか $1$ 通りしかありません.よって順にその方法をシミュレーションすれば判定できます.区間内を定数列に変更したり,数え上げたりできればよいです.

C. Nezzar and Nice Beatmap

最初の点を適当に選んだあと,最も遠い点を次の点として選び続ければよいです.曲がる角度が小さいとその次の距離が遠くなるため.

適当な乱択と rollback dfs のような手法もできるかもしれません.

D. Nezzar and Hidden Permutations

$l$ と $r$ を結ぶ辺だと思います.次数 $n-1$ の点があれば,そこでの $p_v,q_v$ は同じ値に確定します.またそのような $v$ での値は確定させて,以降その点は取り除いて解くことにすればよいです.

次数 $n-1$ の点がないとして,$p_i=q_i$ となる $i$ が生じないように $p,q$ を作ることが可能であることを示します.

(この結論が予想できている前提ですが)次数 $n-1$ の点が生じない範囲で辺を可能な限りで追加した状態について示すという方針が分かりやすいかもしれません.補グラフについて考えると,

  • 補グラフについて任意の頂点の次数が $1$ 以上
  • 補グラフについて任意の辺のどちらかの端点の次数はちょうど $1$

が成り立つとしてよいです(このグラフを構築することも難しくない).

このような補グラフは森で,各連結成分は star であることが示せます.そのような場合に順列を作ればよく,連結成分ごとに考えて簡単に作ることができます.

E. Nezzar and Tournaments

チームの区別をせずにプレイヤを $x_1,x_2,\ldots,x_{n+m}$ と並べた場合,人 $i$ の獲得スコアは $x_i-\min(x_1-k,\min(x_1,\ldots,x_{i-1}))$ であることが分かります.

先頭のプレイヤを固定したときの最適化について考えると,次のような並びが最適であることがわかります.ただし $a,b$ は昇順ソートされているとします.

$b_m,b_{m-1},\ldots,b_1,a_1,a_2,\ldots,a_n$.ただしここからひとりを先頭に移動する.これは先頭に来る人を固定したときに,どのプレイヤについてもその人のスコアが最適化されている($b_i$ についてはスコア最小化,$a_i$ についてはスコア最大化されている)ことから分かります.これでひとまず多項式時間で解けるようにはなりました.

$x=b_i$ を先頭に持ってきたときのスコアについて考えます.これは次のようになります.$m=\min(a_1,b_1)$ とします.

$$\sum_i \min(x-k-b_i,0)+\sum_i (a_i-\min(x-k,m)).$$

$x$ の関数としてみたとき,残念ながらこれに凸性はありません.しかし $k,m$ が定数であることに注意して $x$ と $k+m$ の大小関係で場合分けをすると,$(-\infty,k+m]$, $[k+m,\infty)$ のそれぞれの範囲で上凸関数であることが分かります.よって,それぞれの範囲ごとに凸関数最大化をすれば最適解が決定できます.最大値をとる $x$ を求め,それに最寄りの $b_i$ を先頭に持ってくるパターンを計算することで問題の解を得ることができます.

これは $b_i$ を先頭に持ってくるパターンですが,$a_i$ を先頭に持ってくるパターンも式の細部が違うだけでほとんど同じことになります.

適当な Fenwick Tree を持っておくことで $x$ を固定したときの求値は高速化できて,全体の計算量は $O(Q\log^2(N+M))$ や $O(Q\log(N+M)\log (A_{\max}+B_{\max}))$ などになります.

F. Nezzar and Chocolate Bars

まずひとつの棒について考えます.$f[n]$ を $n$ 回の操作完了時点で完成している確率とします.包除原理から,

$$f[n]=\sum_{a\geq 1}(-1)^a\biggl(\frac{L-Ka}{L}\biggr)^n\binom{n+1}{a}$$

のようになります.やりたいことは,$f$ の EGF つまり $f(x)=\sum_nf[n]\cdot \frac{x^n}{n!}$ をすべての棒にわたって掛け合わせることです.

$f$ の EGF は,$\sum_{n\geq a-1}\binom{n+1}{a}\frac{(bx)^n}{n!}$ の形の形式的べき級数の線形結合です.この生成元を式変形すると,

$$\sum_{n=0}^{\infty}\binom{n+a}{a}\frac{(bx)^{n+a-1}}{(n+a-1)!}=\frac{(bx)^{a-1}}{a!}\sum_n(n+a)\frac{(bx)^n}{n!}=\frac{(bx)^{a-1}}{a!}((bx)e^{bx}+ae^{bx})$$

となるため,$f$ の EGF は,$x^ie^{bx}$ の形の式の線形結合で書けることが分かります.このような EGF の積も $x^ie^{bx}$ の形で書けて,$b$ は $j/L$ ($0\leq j\leq L$) の形です.

結局,棒ごとの EGF の総積は,$\sum_{i,j}c_{i,j}x^ie^{jx/L}$ の形で書けて,このような係数は dp で求められます.

ここから,$n$ 回の操作終了時点で未完成であるような確率の EGF が得られます.これを OGF になおして $x=1$ を代入するというのが答えを得るための計算です.

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