freeCodeCamp/curriculum/challenges/russian/08-coding-interview-prep/project-euler/problem-472-comfortable-dis...

2.8 KiB
Raw Blame History

id challengeType title forumTopicId localeTitle
5900f5451000cf542c510057 5 Problem 472: Comfortable Distance II 302149 Задача 472: Комфортное расстояние II

Description

Есть N мест подряд. N человек приходит один за другим, чтобы заполнить места в соответствии со следующими правилами: ни один человек не сидит рядом с другим. Первый человек выбирает любое место. Каждый последующий человек выбирает место, наиболее удаленное от кого-либо еще, уже сидящего, если оно не нарушает правило 1. Если есть более одного выбора, удовлетворяющего этому условию, то человек выбирает самый левый выбор. Обратите внимание, что из-за правила 1 некоторые места, безусловно, останутся незанятыми, а максимальное количество людей, которые могут быть установлены, меньше N (для N> 1).

Вот возможные посадочные места для N = 15:

Мы видим, что если первый человек выбирает правильно, 15 мест могут вмещать до 7 человек. Мы также видим, что у первого человека есть 9 вариантов, чтобы максимизировать число людей, которые могут сидеть.

Пусть f (N) - количество вариантов, которые первый человек должен максимизировать количество человек, занявших N мест подряд. Таким образом, f (1) = 1, f (15) = 9, f (20) = 6 и f (500) = 16.

Кроме того, Σf (N) = 83 для 1 ≤ N ≤ 20 и Σf (N) = 13343 для 1 ≤ N ≤ 500.

Найдите Σf (N) для 1 ≤ N ≤ 1012. Дайте последние 8 цифр вашего ответа.

Instructions

Tests

tests:
  - text: <code>euler472()</code> should return 73811586.
    testString: assert.strictEqual(euler472(), 73811586);

Challenge Seed

function euler472() {
  // Good luck!
  return true;
}

euler472();

Solution

// solution required