Задача к ЕГЭ по информатике на тему «Мусорки, кольцевая дорога» №5

В городе W на одной из кольцевых автодорог с двусторонним движением расположены N многоэтажных жилых зданий для детских садов и школ (не более одного здания на каждом километре дороги). Длина кольцевой автодороги равна К км. Нулевой километр и K-й километр находятся в одной точке. Дети ежедневно получают пончики. Пончики упакованы в доставочные пакеты, каждый из которых вмещает не более V штук. Каждый доставочный пакет используется для доставки пончиков только в одно здание, при этом в каждое здание может быть доставлено не более одного пакета с неполной загрузкой. Склад для пончиков открыли в одном из зданий таким образом, чтобы количество доставляемых пакетов с пончиками было максимальным. Пончики в те здания, которые находятся на расстоянии более M от склада, не доставляются. Определите необходимое количество доставочных пакетов на этом складе.

Входные данные:

Даны два входных файла: файл A и файл B, каждый из которых в первой строке содержит числа N, K, V и M (1 ≤ N ≤ 10000000,1 ≤ K ≤ 10000000,1 ≤ V ≤ 10000,1 ≤ M ≤ 10000000)  – количество зданий, длина кольцевой автодороги в километрах и максимальное расстояние, на которое можно осуществлять доставку пончиков. В каждой из следующих N строк находятся два числа: номер километра кольцевой автодороги, на котором расположено здание, и количество пончиков(все числа натуральные, количество не превышает 1000). Данные указаны в порядке расположения зданий на автодороге.

В ответе укажите два числа: сначала искомое значение для файла А, затем для файла B.

f = open(’27B.txt’)
n, k,  v, m= map(int, f.readline().split())
a = [0] * k
for i in range(n):
    z, p = map(int, f.readline().split())
    a[z % k] = p // v + (p % v > 0)
cm = sum(a)
if m < k // 2:
    c = sum(a[:m * 2 + 1])
    cm = c if a[m] else 0
    for i in range(1, k):
        c += a[(i + m * 2) % k] - a[i - 1]
        if a[(i + m) % k]:
            cm = max(cm, c)
print(cm)

Ответ: 1214 4061
Оцените статью
Я решу все!