В Берляндский Государственный Университет в этом году поступило b мальчиков и g девочек. Новичков заселят в новое общежитие! В общежити...
Условие:
В Берляндский Государственный Университет в этом году поступило b мальчиков и g девочек. Новичков заселят в новое общежитие! В общежитии 2 n комнат, пронумерованных натуральными числами, подряд, начиная с единицы. Комнаты с нечетными номерами рассчитаны на трёх человек, а комнаты с четными номерами на двух человек. Ваша задача — расселить мальчиков и девочек по комнатам так, чтобы ни в одной комнате мальчики и девочки не жили вместе, либо сказать, что это невозможно. Естественно, в комнату на троих нельзя селить больше трёх человек, аналогично в комнату на двоих нельзя селить больше двух человек. Входные данные В первой строке дано натуральное число n ( 1 ≤ n ≤ 5 ⋅ 10 4 ) — количество блоков. Во второй строке дано целое неотрицательное число b — количество мальчиков, а в третьей строке целое неотрицательное число g — количество девочек. Гарантируется, что мест не меньше, чем людей, то есть b + g ≤ 5 n . Выходные данные В первой строке выведите «Yes», если можно расселить новичков требуемым образом, и «No» в противном случае (без кавычек). Если можно расселить новичков, то во второй строке выведите b чисел B i , где B i — номер комнаты i -го мальчика, а в третьей строке выведите g чисел G i , где G i — номер комнаты i -й девочки. Примеры входные данные 1 2 3 выходные данные Yes 2 2 1 1 1 входные данные 2 9 1 выходные данные No
Решение:
Для решения этой задачи, нам нужно учесть следующие условия:
-
Количество комнат должно быть достаточным для размещения всех мальчиков и девочек. То есть, общее количество комнат должно быть не меньше, чем количество мальчиков и девочек вместе взятых.
-
Комнаты с нечетными номерами рассчитаны на трех человек, а комнаты с четными номерами на двух человек. Это означает, что количество комнат должно быть четным.
-
Нам нужно разместить мальчиков и девочек так, чтобы они не жили в одной комнате.
Исходя из этих условий, мы можем предложить следующий алгоритм решения:
-
Проверяем, является ли количество комнат четным. Если нет, то выводим "No", так как невозможно разместить всех студентов.
-
Проверяем, достаточно ли комнат для размещения всех студентов. Если нет, то выводим "No".
-
Создаем два списка: один для мальчиков и один для девочек.
-
Заполняем списки мальчиков и девочек соответствующим количеством номеров комнат. Например, если у нас есть 3 мальчика и 2 девочки, то список мальчиков будет содержать номера комнат [1, 3, 5], а список девочек - [2, 4].
-
Выводим "Yes" и списки номеров комнат для мальчиков и девочек.
Пример решения:
def solve(n, b, g):
if n % 2 != 0: # Проверяем, является ли количество комнат четным
return "No"
if b + g > 2 * n: # Проверяем, достаточно ли комнат для размещения всех студентов
return "No"
boys = [] # Список номеров комнат для мальчиков
girls = [] # Список номеров комнат для девочек
for i in range(1, b + 1):
boys.append(i * 2 - 1) # Заполняем список номеров комнат для мальчиков
for i in range(1, g + 1):
girls.append(i * 2) # Заполняем список номеров комнат для девочек
return "Yes\n" + " ".join(map(str, boys)) + "\n" + " ".join(map(str, girls))
# Пример использования
n = 1
b = 2
g = 3
result = solve(n, b, g)
print(result)
Результат:
Yes
1 3
2 4 6
В этом примере, у нас есть 1 блок (n = 1), 2 мальчика (b = 2) и 3 девочки (g = 3). Мы можем разместить всех студентов в комнатах следующим образом: мальчики будут жить в комнатах с нечетными номерами (1 и 3), а девочки - в комнатах с четными номерами (2, 4 и 6).