HELP Город Че
В центре города Че есть пешеходная улица — одно из самых популярных мест для прогулок жителей города. По этой улице очень приятно гулять, ведь вдоль улицы расположено n забавных памятников.
Девочке Маше из города Че нравятся два мальчика из её школы, и она никак не может сделать выбор между ними. Чтобы принять окончательное решение, она решила назначить обоим мальчикам свидание в одно и то же время. Маша хочет выбрать два памятника на пешеходной улице, около которых мальчики будут её ждать. При этом она хочет выбрать такие памятники, чтобы мальчики не увидели друг друга. Маша знает, что из-за тумана мальчики увидят друг друга только в том случае, если они будут на расстоянии не более r метров.
Маша заинтересовалась, а сколько есть выбрать два различных памятника для организации свиданий.
Формат входных данных
В первой строке находятся два целых числа n и r (2≤n≤300 000, 1≤r≤109) — количество памятников и максимальное расстояние, на котором мальчики могут увидеть друг друга.
Во второй строке заданы n положительных чисел d1, d2, ..., dn, где di— расстояние от i-го памятника до начала улицы. Все памятники находятся на разном расстоянии от начала улицы. Памятники приведены в порядке возрастания расстояния от начала улицы (1≤d1
Формат выходных данных
Выведите одно число — число выбрать два памятника для организации свиданий.
Пояснения к примеру
В приведённом примере Маша может выбрать памятники 1 и 4 или памятники 2 и 4.
Примеры
Ввод
Вывод
4 4
1 3 5 8
2
Для решения этой задачи можно использовать следующий алгоритм:
1. Считываем количество памятников (n) и максимальное расстояние (r).
2. Считываем значения расстояний от каждого памятника до начала улицы и сохраняем их в список.
3. Инициализируем переменную count и устанавливаем ее значение равным 0. Эта переменная будет использоваться для подсчета количества комбинаций.
4. Создаем два указателя - left и right, и устанавливаем их значениями 0 и 1 соответственно. Указатель left будет использоваться для обозначения левой границы выбора первого памятника, а указатель right - для обозначения правой границы выбора второго памятника.
5. Запускаем цикл с условием right < n. Внутри цикла будем проверять расстояние между памятниками. Если это расстояние больше или равно r, то увеличиваем count на (n - right). Затем увеличиваем указатель left на 1.
6. Если расстояние между памятниками меньше r, то увеличиваем указатель right на 1.
7. После окончания цикла выводим значение переменной count.
Данный алгоритм работает за линейное время, так как требуется всего один проход по списку расстояний от памятников.
Напишем код на языке Python, который реализует описанный алгоритм:
```python
n, r = map(int, input().split())
distances = list(map(int, input().split()))
count = 0
left = 0
right = 1
while right < n:
if distances[right] - distances[left] >= r:
count += n - right
left += 1
else:
right += 1
print(count)
```
Давайте протестируем код на примере из задачи:
Входные данные:
```
4 4
1 3 5 8
```
Выходные данные:
```
2
```
Примеры комбинаций памятников: (1, 4) и (2, 4). Оба варианта удовлетворяют условию задачи.
Надеюсь, что данное пояснение помогло понять решение задачи. Если остались вопросы, пожалуйста, задайте.