速解き回のようで速解き回でない、少し速解き回のARC
まだ出てない目が i 個で自分に手番が回ってきたときの、ここからの自分の罰金期待値 P_i、相手の罰金期待値 Q_i とする。
最終局面は P_0=0,Q_0=0 である。
i-1 と i の関係は以下のような式になる。
まとめると、
ここから、Q_i を消すと、P_i を P_{i-1},Q_{i-1} だけで計算できる式になる。それをもって Q_i も計算できる。
i が小さい方から求めていって、P_N,Q_N が答え。
P と先頭から比較してはじめて異なる値が出てくる位置を d とする。
桁DPのように、d ごとに分けて考えれば重複を除け、また P より小さい条件を表しやすい。
d には必ず P_d より小さい値が置かれ、その後に置ける数は自由となる。
t を固定すると、条件を満たす数列は以下の3つの場合がある。
t が P 中に出てくる位置を u とする。t が P 中に出てこない場合、便宜的に u=K とする。
N=18 K=13 t=10 の例 u i 0 1 2 3 4 5 6 7 8 9 10 11 12 P 5 13 11 2 18 1 10 15 17 4 12 7 3 ① 5 13 11 2 10 x x x x x x x x 5 10 x x x x x x x x x x x など(xは任意) ② 5 9 x x x x x x 10 x x x x 5 13 11 2 18 1 4 x x x 10 x x など ③ 5 13 11 2 18 1 10 15 6 x x x x 5 13 11 2 18 1 10 15 17 4 12 3 x など
上記の例で、d=4 として18を10にした場合、その後に置ける箇所は K-d-1=8 個、残る数字は N-d-1=13 個ある。
よって、{}_{13}P_{8} 通りある。
このように、10より左で10より大きい箇所は、d=1,2,4 \ (P_d=13,11,18) とあるので、合計すると以下の個数分ある。
一般化すると、t より左で、t より大きい値が出現するindexの集合を S_t として、①に該当する数列は以下の個数存在する。
上記の例で、d=1 として、そこを P_1=13 より小さい何らかの値に変更したとする。
その後に置ける箇所は K-d-1=11 個、残る数字は N-d-1=16 個ある。
この中の1つが t である数列の個数を数える。
t を置く場所は11通り、他の箇所の決め方が {}_{15}P_{10} 通り。
よって、d=1 の箇所に置く数を1つ決めた場合、以降に10が出てくる数列は、11 \times {}_{15}P_{10} 通りある。
一般化すると、以下のようになる。(ただし、K-d-2 が負になる場合は 0)
d の箇所に置ける数の個数分だけ、これが倍加される。
いま、L_i を「P_i 未満の数のうち、i より左に出てこない数の個数」と定義する。
たとえば、L_6 なら、1,2,5 は P_6=10 より小さくて左に出てくるので、それ以外の 6 個が該当する。
「d の箇所に置ける数」は、基本的に L_d 個である。ただし、t 自身であってはならないので、t と P_d の大小関係によって変化する。
このように補正した値を L'_d(t) とする。
②に該当する数列は、以下の個数分だけ存在する。
t が P 中に出てくる場合のみに考慮される。
要は、先頭のいくつかが固定されて、残りが自由である数列の中で、P は何番目ですか、という値となる。
i-1 までが固定されて、i 以降が自由であるよい数列の中で P 以下のものの個数を R_i とする。
i=10, Pi=12 の場合 i i 0 1 2 3 4 5 6 7 8 9 10 11 12 ここまでが固定されて、 P 5 13 11 2 18 1 10 15 17 4 12 7 3 残り3箇所が自由なよい数列の内、 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ←P以下のものの個数は?
i に12未満の数を置いて P 未満であることを確定させるか、または12のままにするか。
i に置ける数の個数は、先述の L_i と一致する。その後に置く数は自由となる。
12のままにした場合、その個数は R_{i+1} と一致する。
まとめると、以下のようになる。
末尾から求めていける。
③に該当する数列は、t が P 中に出現する場合、R_{u+1} 個存在することになる。(出現しない場合は0)
t が小さい方から計算する。
①②は、t によって加算される値が異なってくるが、
という性質があるため、Fenwick Tree で、t が小さい方から答えを求めて t の位置を更新していけば、管理できる。
t=1 のとき i 0 1 2 3 4 5 6 7 8 9 10 11 12 ①: ①の場合の加算分 P 5 13 11 2 18 1 10 15 17 4 12 7 3 ②: ②の場合の加算分,係数 Li-1 ① ① ① ① ① ❷: ②の場合の加算分,係数 Li ② ② ② ② ② ❷ t=2 のとき i 0 1 2 3 4 5 6 7 8 9 10 11 12 P 5 13 11 2 18 1 10 15 17 4 12 7 3 ① ① ① ② ② ② ❷ t=3 のとき i 0 1 2 3 4 5 6 7 8 9 10 11 12 P 5 13 11 2 18 1 10 15 17 4 12 7 3 ① ① ① ① ① ① ① ① ① ① ② ② ② ❷ ② ❷ ② ② ② ② ② ② ❷ t=4 のとき i 0 1 2 3 4 5 6 7 8 9 10 11 12 P 5 13 11 2 18 1 10 15 17 4 12 7 3 ① ① ① ① ① ① ① ② ② ② ❷ ② ❷ ② ② ② ❷ ...
t の答えを求める際は、t の出現位置を u として、まず自身の箇所を更新する。
(t が P 中に出てこない場合、便宜的に u=K とするが、更新は行わないでよい)
この上で、FenwickTree 上の 0,1,...,u の累積和が①+②の場合、R_{u+1} が③の場合に相当する。
O(N \log{N}) で全ての t に対して求められる。