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.

Rail tour

928 views

Published on

Editorial of Code Festival 2014 Morning Challenge (あさぷろ) Hard D

Published in: Science
  • Be the first to comment

  • Be the first to like this

Rail tour

  1. 1. Rail Tour @pepsin_amylase : 原案, テスト @kawatea : テスト 1
  2. 2. 問題 線分上でだけv 倍早く動ける最短経路 2 S G
  3. 3. 問題 線分上でだけv 倍早く動ける最短経路 3 S G
  4. 4. 最短経路として曲線はない • 曲線の区間はすべて鉄道上でない • 鉄道は直線なので • すると曲線よりも直線のほうが必ず速い 4
  5. 5. 最短経路の経由点は? • 最短経路は折れ線になる(曲線なし) • 折れ曲りうる経由点を洗い出して 最短経路に帰着したい • 始点終点と鉄道の折れてる点は使いそう • 鉄道に沿うルートが最短の時など • これを駅と呼ぶことにします • ほかは? 5
  6. 6. 最短経路の経由点は? • 場合分けして考えます 6 駅 駅を除く 線路上 それ以外 駅○ ① ③ 駅を除く 線路上① ② ③ それ以外③ ③ ③
  7. 7. ③どうでもいい点を途中で経由 • 以下のルートが最短経路だったとする 7 駅でも線分上でもない点
  8. 8. ③どうでもいい点を途中で経由 • 点の取り方から、ルートは鉄道でない 8 駅でも線分上でもない点 鉄道でない鉄道でない
  9. 9. ③どうでもいい点を途中で経由 • 赤のルートがより速いので矛盾 9 駅でも線分上でもない点 鉄道でない鉄道でない
  10. 10. 最短経路の経由点は? • 場合分けして考えます 10 駅 駅を除く 線路上 それ以外 駅○ ① × 駅を除く 線路上① ② × それ以外× × ×
  11. 11. ②線路上から線路上 • 次のような設定で 所要時間をx, y で微分して頑張ると 極値は定義域の境界上= 駅のみに 限られることがわかる • x, y の定義域に注意 11 θ s t x y
  12. 12. 最短経路の経由点は? • 場合分けして考えます 12 駅 駅を除く 線路上 それ以外 駅○ ① × 駅を除く 線路上① × × それ以外× × ×
  13. 13. ①駅から線路上 • 次のような設定で 所要時間をx について微分すると 入射角が一定になることがわかる 13 s x t
  14. 14. ①駅から線路上 • 三分探索してもOK です 14
  15. 15. まとめ • 次の頂点でグラフを作り最短経路 • 駅 • 駅から線路に入射角acos(1/v) の 直線を引いた交点 15
  16. 16. 注意点 • 辺のコストに注意 • 同じ線分に載っている頂点に限り 速度v になる • グラフの作り方に注意 • 頂点数は最大O(n2) になるので、 全部に辺を張るとTLE • 駅でない点同士で結ぶ必要はない • 三角不等式を考えればOK 16
  17. 17. 情報 • Judge Solutions • amylase (C++) : 141 lines • kawatea (C++) : 243 lines 17

×