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.

RUPC 2019 Day3 D: 矢

135 views

Published on

2019/3/7 立命館大学プログラミング合宿 Day3 (北大セット) D 問題

Published in: Technology
  • Be the first to comment

  • Be the first to like this

RUPC 2019 Day3 D: 矢

  1. 1. RUPC2019_D 矢 原案 rodea 解説 monkukui 問題文 rodea 解答 rodea monkukui Tsuta_J
  2. 2. 問題概要 ≔ 送風機 図のように、送風機の位置情報が与えられる。 ≔ 矢 簡単のため、座標の両端に送風機があることとする。 まず、損失の定義を具体的に説明する。
  3. 3. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき
  4. 4. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき 損失!
  5. 5. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき
  6. 6. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき
  7. 7. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき
  8. 8. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき
  9. 9. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき
  10. 10. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき 損失!
  11. 11. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき 損失!
  12. 12. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき 損失!
  13. 13. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき 損失!
  14. 14. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき
  15. 15. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき
  16. 16. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき 損失!
  17. 17. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき 損失!
  18. 18. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき
  19. 19. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき
  20. 20. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき 損失!
  21. 21. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき
  22. 22. 問題概要 ≔ 送風機 ≔ 矢 例えば、矢の長さが 2 のとき 合計 8 回の損失!
  23. 23. 問題概要 • 以下のクエリが 𝑄 個与えられる • 損失が 𝑙 回まで許されてるとき、到達できる矢の最小の長さは? 1 ≤ 𝑁 ≤ 105 (座標の長さ) 1 ≤ 𝑄 ≤ 105 (クエリの数)
  24. 24. 考察 矢の長さに対して、損失回数には単調性がある。 矢の長さに対する損失回数が事前に分かっていれば、各クエリ処理 は二分探索をすることで、𝑂 log 𝑁 で処理できる。
  25. 25. 考察 矢の長さに対して性がある 矢の長さに対する損失回数が事前に分かっていれば、各クエリ処理 は二分探索をすることで、𝑂 log 𝑁 で処理できる 矢の長さ 損失回数 1 13 2 8 3 4 4 2 5 1 6 0
  26. 26. 考察 𝑑𝑝𝑖 ≔ 矢の長さが 𝑖 の時の損失回数 (𝑎𝑖 ≔ 送風機がない、ちょうど長さが 𝑖 の区間の数)
  27. 27. 考察 𝑑𝑝𝑖 ≔ 矢の長さが 𝑖 の時の損失回数 (𝑎𝑖 ≔ 送風機がない、ちょうど長さが 𝑖 の区間の数) 𝑑𝑝2 = 1 ⋅ 𝑎2 + 2 ⋅ 𝑎3 + 3 ⋅ 𝑎4 + 4 ⋅ 𝑎5
  28. 28. 考察 𝑑𝑝𝑖 ≔ 矢の長さが 𝑖 の時の損失回数 (𝑎𝑖 ≔ 送風機がない、ちょうど長さが 𝑖 の区間の数) 𝑑𝑝𝑖 = 1 ⋅ 𝑎𝑖 + 2 ⋅ 𝑎𝑖+1 + 3 ⋅ 𝑎𝑖+2 + ⋯ + 𝑛 − 𝑖 + 1 ⋅ 𝑎 𝑛
  29. 29. 考察 𝑑𝑝𝑖 ≔ 矢の長さが 𝑖 の時の損失回数 (𝑎𝑖 ≔ 送風機がない、ちょうど長さが 𝑖 の区間の数) 𝑑𝑝𝑖 = 1 ⋅ 𝑎𝑖 + 2 ⋅ 𝑎𝑖+1 + 3 ⋅ 𝑎𝑖+2 + ⋯ + 𝑛 − 𝑖 + 1 ⋅ 𝑎 𝑛 𝑑𝑝𝑖+1 = 1 ⋅ 𝑎𝑖+1 + 2 ⋅ 𝑎𝑖+2 + ⋯ + 𝑛 − 𝑖 ⋅ 𝑎 𝑛
  30. 30. 考察 𝑑𝑝𝑖 ≔ 矢の長さが 𝑖 の時の損失回数 (𝑎𝑖 ≔ 送風機がない、ちょうど長さが 𝑖 の区間の数) 𝑑𝑝𝑖 = 1 ⋅ 𝑎𝑖 + 2 ⋅ 𝑎𝑖+1 + 3 ⋅ 𝑎𝑖+2 + ⋯ + 𝑛 − 𝑖 + 1 ⋅ 𝑎 𝑛 𝑑𝑝𝑖+1 = 1 ⋅ 𝑎𝑖+1 + 2 ⋅ 𝑎𝑖+2 + ⋯ + 𝑛 − 𝑖 ⋅ 𝑎 𝑛 𝑑𝑝𝑖 = 𝑑𝑝𝑖+1 + 𝑎𝑖 + 𝑎𝑖+1 + 𝑎𝑖+2 + ⋯ + 𝑎 𝑛
  31. 31. 考察 • DP の更新を愚直に行うと𝑂 𝑁2 かかる。 • 例えば累積和やセグ木などを使い、𝑎𝑖 の区間和を高速に求めること でDP の更新が可能。 • データ構造を使わなくとも、少し工夫するとできる。 • 全体では DP + 二分探索で 𝑂 𝑁 + 𝑄 𝑙𝑜𝑔 𝑁 でこの問題が解けた。
  32. 32. Writer 解 • Tsuta_J (C++) 65 行 • monkukui (C++) 45 行 • rodea (C++) 60 行
  33. 33. 提出状況 • On-site : rupc_zekkidenamida (28min) • On-line : okimochi (23 min) • 31 / 93 (33.3 %)

×