Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
解説:エンブレム
技術室奥プログラミングコンテスト#2 問題D
問題概要
H×Wの長方形がある
左下の角から線を引き始める
端にぶつかると反射する
角にぶつかると止まる
線の交点の数は?
考察
実はHが答えに関係しないのでは???
→関係しない(上下に引き延ばされるだけ)
考察
じゃあWとKは?
→その“比”が答えに関係する
(比を保ったまま値を変えても左右にのびるだけ)
考察
WとKの比が重要らしい
そこでとりあえず、W,Kをgcd(W,K)で割って、互い
に素にしておく(以下W,Kは常に互いに素)。
考察
Hが何でもよいのだから、K×Wの長方形で問題を考
えなおしてみる。
線の交点がすべて格子点に乗りそう(後で証明)。
つまり、線の交点が乗るような格子点の数を数えれ
ばいいことになる。
考察
ではそれらはどんな格子点か?
実は、格子点を座標(x,y)とおいたときに、
x+y=0(mod 2)となることと、線の交点が乗ることは
同値。
以下でそれを示す
x+y=0(mod 2)⇐線の交点が乗る
線分を引く操作において、ある格子点(x1,y1)を通り、
次に格子点(x2,y2)通ったとすると、
x1+y1=x2+y2(mod 2)が成り立つ。
これは、次の格子点に移る際には、x,yがそれぞれ...
x+y=0(mod 2)⇒線の交点が乗る
まず、いかなる格子点(x,y)についても、(x-1,y-1),(x-
1,y+1),(x+1,y-1),(x+1,y+1) のどこに向かって線を引
き始めても、いづれどこかの角にぶつかる。
なぜなら...
x+y=0(mod 2)⇒線の交点が乗る
また、W,Kが互いに素であることから、長方形の4
つの角は、x+y(mod 2)が0のもの2つと1のもの2つに
分けられる。
さらに、ある角から出発し、その角に戻ってくるこ
とがないことも自明(どこ...
x+y=0(mod 2)⇒線の交点が乗る
よって、 x+y=0(mod 2)を満たす格子点すべてを、引
いた線分は2回通ることが示された。
交点が格子点に乗る証明
今言ったように、座標(0,0)から引き始めたやつは、
x+y=0(mod 2)の点しか通らない
よって、下の図のような状態はない
アルゴリズム
先の議論より、長方形の内部にある、x+y=0(mod 2)
の格子点の数が求まればよいとわかった。
これを、xを2で割った余りについて場合分けして解
く
x=1(mod 2)のとき
まず、このようなxは、⌊W/2⌋個存在する。( ⌊a⌋はガ
ウス記号)
それぞれのxについて、y=1(mod 2)となるようなも
のの個数を求めたいが、これは、 ⌊K/2⌋個である。
よって、 ⌊W/2⌋× ⌊...
x=0(mod 2)のとき
先と同様に考えると、⌊(W-1)/2⌋× ⌊(K-1)/2⌋個の格子
点がある。
アルゴリズム
二つの場合が求まったので、これを足して答えを得
る。
証明が雑でごめんなさい
おしまい
Upcoming SlideShare
Loading in …5
×

解説:エンブレム

507 views

Published on

技術室奥プログラミングコンテスト、D問題の解説です。

Published in: Software
  • Be the first to comment

  • Be the first to like this

解説:エンブレム

  1. 1. 解説:エンブレム 技術室奥プログラミングコンテスト#2 問題D
  2. 2. 問題概要 H×Wの長方形がある 左下の角から線を引き始める 端にぶつかると反射する 角にぶつかると止まる 線の交点の数は?
  3. 3. 考察 実はHが答えに関係しないのでは??? →関係しない(上下に引き延ばされるだけ)
  4. 4. 考察 じゃあWとKは? →その“比”が答えに関係する (比を保ったまま値を変えても左右にのびるだけ)
  5. 5. 考察 WとKの比が重要らしい そこでとりあえず、W,Kをgcd(W,K)で割って、互い に素にしておく(以下W,Kは常に互いに素)。
  6. 6. 考察 Hが何でもよいのだから、K×Wの長方形で問題を考 えなおしてみる。 線の交点がすべて格子点に乗りそう(後で証明)。 つまり、線の交点が乗るような格子点の数を数えれ ばいいことになる。
  7. 7. 考察 ではそれらはどんな格子点か? 実は、格子点を座標(x,y)とおいたときに、 x+y=0(mod 2)となることと、線の交点が乗ることは 同値。 以下でそれを示す
  8. 8. x+y=0(mod 2)⇐線の交点が乗る 線分を引く操作において、ある格子点(x1,y1)を通り、 次に格子点(x2,y2)通ったとすると、 x1+y1=x2+y2(mod 2)が成り立つ。 これは、次の格子点に移る際には、x,yがそれぞれ、1増 えるまたは1減ることより明らか。 最初に座標(0,0)にいるので、x+y=0(mod 2)が常に成立
  9. 9. x+y=0(mod 2)⇒線の交点が乗る まず、いかなる格子点(x,y)についても、(x-1,y-1),(x- 1,y+1),(x+1,y-1),(x+1,y+1) のどこに向かって線を引 き始めても、いづれどこかの角にぶつかる。 なぜなら、WとKが互いに素であるから、中国式剰余 定理より、x+a=0(mod W),y+b=0(mod H)が成り立つ aがかならず存在するから。
  10. 10. x+y=0(mod 2)⇒線の交点が乗る また、W,Kが互いに素であることから、長方形の4 つの角は、x+y(mod 2)が0のもの2つと1のもの2つに 分けられる。 さらに、ある角から出発し、その角に戻ってくるこ とがないことも自明(どこかで180度回転する必要 があるから)
  11. 11. x+y=0(mod 2)⇒線の交点が乗る よって、 x+y=0(mod 2)を満たす格子点すべてを、引 いた線分は2回通ることが示された。
  12. 12. 交点が格子点に乗る証明 今言ったように、座標(0,0)から引き始めたやつは、 x+y=0(mod 2)の点しか通らない よって、下の図のような状態はない
  13. 13. アルゴリズム 先の議論より、長方形の内部にある、x+y=0(mod 2) の格子点の数が求まればよいとわかった。 これを、xを2で割った余りについて場合分けして解 く
  14. 14. x=1(mod 2)のとき まず、このようなxは、⌊W/2⌋個存在する。( ⌊a⌋はガ ウス記号) それぞれのxについて、y=1(mod 2)となるようなも のの個数を求めたいが、これは、 ⌊K/2⌋個である。 よって、 ⌊W/2⌋× ⌊K/2⌋個の格子点がある。
  15. 15. x=0(mod 2)のとき 先と同様に考えると、⌊(W-1)/2⌋× ⌊(K-1)/2⌋個の格子 点がある。
  16. 16. アルゴリズム 二つの場合が求まったので、これを足して答えを得 る。 証明が雑でごめんなさい おしまい

×