freeCodeCamp/curriculum/challenges/japanese/10-coding-interview-prep/project-euler/problem-472-comfortable-dis...

2.1 KiB

id title challengeType forumTopicId dashedName
5900f5451000cf542c510057 問題 472: 快適な距離 (2) 5 302149 problem-472-comfortable-distance-ii

--description--

N 個の席が一列に並んでいます。 N 人の人が次々とやって来て、次のルールに従って席を埋めていきます。

  1. 他の人の隣りに座らない。
  2. 最初の人が任意の席を選択する。
  3. 2 人目以降はそれぞれ、ルール 1 に反しない席のうち、既に人が座っている席から最も遠い席を選ぶ。 この条件を満たす席が複数ある場合は、一番左の席を選ぶ。

注意点として、ルール 1 に基づき席の一部は空席のままであり、座れる人数は最大で N 未満です (N > 1)。

N = 15 のとき、考えられる座席配置は次のとおりです。

N = 15 の場合の着席配置

最初の人が席を正しく選択すると、15 席に最大 7 人が座れることが分かります。 また、最初の人が持つ選択肢のうち、座れる人数が最大になる選択肢が 9 つであることも分かります。

N 個の席が一列に並んでいるとき、最初の人が持つ選択肢のうち、座れる人数が最大になる選択肢の数を f(N) とします。 したがって、f(1) = 1, f(15) = 9, f(20) = 6, f(500) = 16 です。

また、1 ≤ N ≤ 20 のときは \sum f(N) = 83 であり、1 ≤ N ≤ 500 のときは \sum f(N) = 13\\,343 です。

1 ≤ N ≤ {10}^{12} のとき、\sum f(N) を求めなさい。 回答は、下位 8 桁とすること。

--hints--

comfortableDistanceTwo()73811586 を返す必要があります。

assert.strictEqual(comfortableDistanceTwo(), 73811586);

--seed--

--seed-contents--

function comfortableDistanceTwo() {

  return true;
}

comfortableDistanceTwo();

--solutions--

// solution required