Решение задачи Каждому по компьютеру с Яндекс Контест

Без пояснения   Просмотров: 2604


В новом учебном году на занятия в компьютерные классы Дворца Творчества Юных пришли учащиеся, которые были разбиты на N групп. В i-й группе оказалось Xi человек. Тут же перед директором встала серьезная проблема: как распределить группы по аудиториям. Во дворце имеется M ≥ N аудиторий, в j-й аудитории имеется Yj компьютеров. Для занятий необходимо, чтобы у каждого учащегося был компьютер и еще один компьютер был у преподавателя. Переносить компьютеры из одной аудитории в другую запрещается. Помогите директору!

Напишите программу, которая найдет, какое максимальное количество групп удастся одновременно распределить по аудиториям, чтобы всем учащимся в каждой группе хватило компьютеров, и при этом остался бы еще хотя бы один для учителя.


Код

n, m = map(int, input().split())
x = list(map(int, input().split()))
idx_x = [i for i in range(n)]
y = list(map(int, input().split()))
idx_y = [i for i in range(m)]
x, idx_x = zip(*sorted(zip(x, idx_x)))
y, idx_y = zip(*sorted(zip(y, idx_y)))
res = [0] * n
pointer = 0
k = 0
for i in range(len(x)):
    while pointer < len(y) and y[pointer] <= x[i]:
        pointer += 1
    if pointer == len(y):
        break
    res[idx_x[i]] = idx_y[pointer] + 1
    k += 1
    pointer += 1
print(k)
print(*res)
# 5 8
# 15 10 13 20 4
# 10 5 2 6 14 4 70

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться



Заявка на расчет