2022-01-21 01:00:18 +05:30
|
|
|
---
|
|
|
|
id: 5900f4f31000cf542c510006
|
2022-01-22 20:38:20 +05:30
|
|
|
title: '問題 391: ホッピングゲーム'
|
2022-01-21 01:00:18 +05:30
|
|
|
challengeType: 5
|
|
|
|
forumTopicId: 302056
|
|
|
|
dashedName: problem-391-hopping-game
|
|
|
|
---
|
|
|
|
|
|
|
|
# --description--
|
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
0 から $s_k$ までの数を 2 進数で表した場合の 1 の個数を、$k$ とします。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
例えば、0 から 5 を 2 進数で表すと、0, 1, 10, 11, 100, 101 となります。 1 が 7 個あるので、$s_5 = 7$ です。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
数列 $S = \\{s_k : k ≥ 0\\}$ の最初の部分は $\\{0, 1, 2, 4, 5, 7, 9, 12, \ldots\\}$ です。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
あるゲームを 2 人のプレイヤーで行います。 ゲームを始める前に、数 $n$ が選択されます。 カウンター $c$ は 0 から開始します。 各ターンで、プレイヤーは 1 から $n$ (1 と $n$を含む) までの数を 1 つ選び、その数の分だけ $c$ を増加させます。 $c$ の結果の値は $S$ の要素である必要があります。 これ以上は有効な手がない場合、そのプレイヤーは負けます。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
例えば、$n = 5$ であり、$c = 0$ から始めるとします。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
- プレイヤー 1 が 4 を選ぶと、$c$ は $0 + 4 = 4$ になります。
|
|
|
|
- プレイヤー 2 が 5を選ぶと、$c$ は $4 + 5 = 9$ になります。
|
|
|
|
- プレイヤー 1 が 3 を選ぶと、$c$ は $9 + 3 = 12$ になります。
|
|
|
|
- 以降も同様に続けます。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
注意点として、$c$ は常に $S$ に属している必要があり、各プレイヤーはたかだか $n$ の分だけ $c$ を増加させることができます。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
ここで、プレイヤー 1 が確実に勝つために最初のターンで選ぶことのできる最大の数を $M(n)$ とし、そのような手がない場合は $M(n)=0$ とします。 例えば、$M(2) = 2$, $M(7) = 1$, $M(20) = 4$ です。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
$1 ≤ n ≤ 20$ のとき、$\sum M{(n)}^3 = 8150$ であることを確認できます。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
$1 ≤ n ≤ 1000$ のとき、$\sum M{(n)}^3$ を求めなさい。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
|
|
|
# --hints--
|
|
|
|
|
2022-01-22 20:38:20 +05:30
|
|
|
`hoppingGame()` は `61029882288` を返す必要があります。
|
2022-01-21 01:00:18 +05:30
|
|
|
|
|
|
|
```js
|
|
|
|
assert.strictEqual(hoppingGame(), 61029882288);
|
|
|
|
```
|
|
|
|
|
|
|
|
# --seed--
|
|
|
|
|
|
|
|
## --seed-contents--
|
|
|
|
|
|
|
|
```js
|
|
|
|
function hoppingGame() {
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
hoppingGame();
|
|
|
|
```
|
|
|
|
|
|
|
|
# --solutions--
|
|
|
|
|
|
|
|
```js
|
|
|
|
// solution required
|
|
|
|
```
|