Processing math: 100%
[[ABC 084]]

ABC 084

C - Special Trains

問題

  • N 個の駅が一直線に並ぶ
  • i 番目の駅 (1iN1) から、次の駅に向かって時刻 Si から Fi ごとに列車が発車する(列車は次の駅で止まる)
  • 次の駅まではそれぞれ Ci かかる
  • i 番目の駅 (1iN) のそれぞれから、N 番目の駅までにかかる所要時間を求めよ

解法

1N500 なので、各駅からそのままシミュレーションすればいい。

ある駅 i に時刻 t に着いた時、次の駅に到着する時間は、

  • まだ最初の運行時刻でない(Si<t)場合、Si+Ci
  • そうでなければ、次の発車時刻は
    • 「整数 m の倍数で、ある整数 n 以上の最小のもの」は、math.ceil(n/m)×m で求められる
    • よって、次の駅に到着する時刻は math.ceil(t/Fi)×Fi+Ci

D - 2017-like Number

問題

  • N も、(N+1)/2 も素数」である整数を、「2017に似た数」と呼ぶことにする
  • Q 個のクエリが与えられる
  • 各クエリでは、2つの整数 li,ri が与えられる
  • 各クエリについて、「li 以上 ri 以下の『2017に似た数』の個数」を求めよ

解法

制約 1l,r105 なので、とりあえず 105 までの「2017に似た数」をすべて求める。

105 までの素数をすべて求め、1052 までの素数 p について、2p1 も素数ならば、2p1 が「2017に似た数」である。

すべて求めたら、小さい順にソートしておく。各クエリの答えは、二分探索で求められる。

二分探索で、「ri が挿入される位置 ー li が挿入される位置」が、答えとなる。ただし、

  • li が「2017に似た数」だった場合、挿入位置は li の位置
  • ri が「2017に似た数」だった場合、挿入位置は ri の次の位置

とする。これは、Python の bisect ライブラリでは、bisect_left()bisect()で使い分けられる。

programming_algorithm/contest_history/atcoder/2017/1230_abc084.txt · 最終更新: 2018/07/25 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0