SRM573 Div1Hard Div2Hard 解説

SRM573 Div1Hard Div2Hard 解説

解説です。上げなおしました。

C8063f1d471d4aed0e530528a564b9c0?s=128

tozangezan

March 15, 2013
Tweet

Transcript

  1. WolfPack(Div1 Hard) WolfPackDivTwo(Div2 Hard) 解説 SRM 573

  2. 問題概要  オオカミがn頭いて、最初(x[i],y[i])にい る  それぞれのオオカミは1回の移動におい て、隣接するマスのうちのどれか1つに進 む  M回移動したときにn頭すべてが同じ場所に

    いた  移動の仕方は何通りあるか、1000000007で 割った余りを求めよ。
  3. 例(Example 2) 2回の移動で 真ん中に行か ないと…… 2回の移動で 真ん中に 行かないと… 余裕! 

    (2,0)以外に集まるこ とは出来ない(両端の どっちかが間に合わな い)  左右にいるオオカミは (2,0)に向かってまっ すぐ向かってくること は確定  真ん中のオオカミは1 回好きな方向に向か い、もどってくる
  4. 素朴な解法  DFSするだけ→O(4NM2)くらいだろうか、さすがに 間に合わない  ということで、何かしらのDPをする。  最後に集まる場所をそれぞれのオオカミの移動は 別々に考えて、最後にそれらをすべて掛け合わせ ればよい。

     →すると集まる場所はO(M2)くらい。それぞれ についてDPをするとO(MN)くらい、combinationを 計算するとO(N)だろう。これだとO(NM^2)。  これでDiv2のほうは通る。
  5. 満点解法に向けて(1)  このような移動は……  こう考える!!

  6. 満点解法に向けて(2)  次に、(0,0)から各点に行く方法が何通りあるか を考えてみる。 (何も数字が書かれていないところはすべて0通りです)

  7. 満点解法に向けて(3) さっきの図を45度回転 させてみましょう!!  見た感じnCi*nCjみたいな感じになっている…??  →正しい  (n+1)Ci*(n+1)Cj=(nCi+nC(i-1))(nCj+nC(j-1)) =nCi*nCj+nC(i-1)*nCj+nCi*nC(j-1) +nC(i-1)*nC(j-1)

     なので、帰納法で証明できます  オオカミごとに独立に動けるので掛け算する
  8. 満点解法  ということで、座標を45度回転させ、n点を平行 移動するときにそれぞれ何通りになるかを計算す ればよいです(この時点ではまだO(NM^2))  しかし、このときスライドするだけなので、 x1y1+x2y1+x3y1+x1y2+x2y2+x3y3 =(x1+x2+x3)(y1+y2) のように独立にもとめることで、計算量はO(MN)

    にすることができ、これで通すことが出来ます。  また、nCk mod pは他にもよく出てくるので自分 で調べてください。JOI2011のKeycardsがおすす めです。
  9. まとめ  Div1 提出者数:11    正解者数:4  Div2 提出者数:47     正解者数:12

     お疲れ様でした