2022-01-21 01:00:18 +05:30
|
|
|
---
|
|
|
|
id: 5900f5451000cf542c510057
|
2022-01-22 20:38:20 +05:30
|
|
|
title: '問題 472: 快適な距離 (2)'
|
2022-01-21 01:00:18 +05:30
|
|
|
challengeType: 5
|
|
|
|
forumTopicId: 302149
|
|
|
|
dashedName: problem-472-comfortable-distance-ii
|
|
|
|
---
|
|
|
|
|
|
|
|
# --description--
|
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
$N$ 個の席が一列に並んでいます。 $N$ 人の人が次々とやって来て、次のルールに従って席を埋めていきます。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
1. 他の人の隣りに座らない。
|
|
|
|
1. 最初の人が任意の席を選択する。
|
|
|
|
1. 2 人目以降はそれぞれ、ルール 1 に反しない席のうち、既に人が座っている席から最も遠い席を選ぶ。 この条件を満たす席が複数ある場合は、一番左の席を選ぶ。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
注意点として、ルール 1 に基づき席の一部は空席のままであり、座れる人数は最大で $N$ 未満です ($N > 1$)。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
$N = 15$ のとき、考えられる座席配置は次のとおりです。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
<img class="img-responsive center-block" alt="N = 15 の場合の着席配置" src="https://cdn.freecodecamp.org/curriculum/project-euler/comfortable-distance-ii.png" style="background-color: white; padding: 10px;" />
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
最初の人が席を正しく選択すると、15 席に最大 7 人が座れることが分かります。 また、最初の人が持つ選択肢のうち、座れる人数が最大になる選択肢が 9 つであることも分かります。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
$N$ 個の席が一列に並んでいるとき、最初の人が持つ選択肢のうち、座れる人数が最大になる選択肢の数を $f(N)$ とします。 したがって、$f(1) = 1$, $f(15) = 9$, $f(20) = 6$, $f(500) = 16$ です。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
また、$1 ≤ N ≤ 20$ のときは $\sum f(N) = 83$ であり、$1 ≤ N ≤ 500$ のときは $\sum f(N) = 13\\,343$ です。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
$1 ≤ N ≤ {10}^{12}$ のとき、$\sum f(N)$ を求めなさい。 回答は、下位 8 桁とすること。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
|
|
|
# --hints--
|
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
`comfortableDistanceTwo()` は `73811586` を返す必要があります。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
|
|
|
```js
|
|
|
|
assert.strictEqual(comfortableDistanceTwo(), 73811586);
|
|
|
|
```
|
|
|
|
|
|
|
|
# --seed--
|
|
|
|
|
|
|
|
## --seed-contents--
|
|
|
|
|
|
|
|
```js
|
|
|
|
function comfortableDistanceTwo() {
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
comfortableDistanceTwo();
|
|
|
|
```
|
|
|
|
|
|
|
|
# --solutions--
|
|
|
|
|
|
|
|
```js
|
|
|
|
// solution required
|
|
|
|
```
|