差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
次のリビジョン両方とも次のリビジョン
programming_algorithm:contest_history:atcoder:2020:0111_dwacon6th_prelims [2020/01/14] – [解法] ikatakosprogramming_algorithm:contest_history:atcoder:2020:0111_dwacon6th_prelims [2020/01/14] – [解法] ikatakos
行 22: 行 22:
 ==== 解法 ==== ==== 解法 ====
  
-解説pdfの確率を利用する方法がよりスマートだが、一応自力解法をメモしておく。+解説pdfの確率を利用する方法がよりスマート。自分は別の考え方で解いて、複雑なけで特に優れている点は無いが、一応メモしておく。
  
 出力すべき値はややこしい書き方をされているが、要はスライムを選ぶ順番が全部で $(N-1)!$ 通りあり全て等確率なので、全ての選び順においての移動距離の総和を求めればよい。 出力すべき値はややこしい書き方をされているが、要はスライムを選ぶ順番が全部で $(N-1)!$ 通りあり全て等確率なので、全ての選び順においての移動距離の総和を求めればよい。
行 35: 行 35:
   ------------------------   ------------------------
   x  1      10  15  21    スライムの位置   x  1      10  15  21    スライムの位置
-  d    2              区間+  d    2              区間
  
 ===区間より左のスライムの考察=== ===区間より左のスライムの考察===
行 49: 行 49:
  
   😄  😄   😄    😄<---di--->🙂 ...   😄  😄   😄    😄<---di--->🙂 ...
 +  
   初手で選ばれたとき   初手で選ばれたとき
   😄  😄   😄     ・<---di--->🙂    残り3個 = 区間3を通るスライムの数と一致   😄  😄   😄     ・<---di--->🙂    残り3個 = 区間3を通るスライムの数と一致
 +  ↓
 +  😄  😄   😄<--->                ←この通過回数と一致
 +  
   いくつか合成されてから選ばれたとき   いくつか合成されてから選ばれたとき
   ・   😄   ・     ・<---di--->🙂    残り1個 = 区間1を通るスライムの数と一致   ・   😄   ・     ・<---di--->🙂    残り1個 = 区間1を通るスライムの数と一致
 +  ↓
 +  😄<-->・                         ←この通過回数と一致
  
 よって $i$ が小さい方から、$d_i$ の総実現値への寄与回数を計算して、その結果を $R_i$ として記録しておくことで、動的計画法的に計算できる。 よって $i$ が小さい方から、$d_i$ の総実現値への寄与回数を計算して、その結果を $R_i$ として記録しておくことで、動的計画法的に計算できる。
行 78: 行 84:
 今までは $k$ を固定して考えていたが、$k=0~i-1$ までの値を取るので、この総和を取ったものが $d_i$ の寄与回数となる。(あくまで $d_i$ より左のみ) 今までは $k$ を固定して考えていたが、$k=0~i-1$ までの値を取るので、この総和を取ったものが $d_i$ の寄与回数となる。(あくまで $d_i$ より左のみ)
  
-$\displaystyle \sum_{k=0}^{i-1}\frac{(i-1)!}{k!}(R_k+k!)$+$\displaystyle (i-1)!\sum_{k=0}^{i-1}\frac{R_k+k!}{k!}$
  
-これは、新しい $R_i$ が求められるたびに $\displaystyle \frac{R_i+i!}{i!}$ を加算していけば、毎回 $\sum$ のループを回さなくても計算できる。+これをこのまま計算すると各 $i$ の中で $k$ のループが回るので $O(N^2)$ だが、$\sum$ 内は $k$ のみに依存するので 
 +新しい $R_i$ が求められるたびに $\displaystyle \frac{R_i+i!}{i!}$ を加算していけば、毎回ループを回さなくても計算できる。
  
 ===区間より右のスライム=== ===区間より右のスライム===
programming_algorithm/contest_history/atcoder/2020/0111_dwacon6th_prelims.txt · 最終更新: 2021/02/18 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0