По-перше, кілька визначень:
- Враховуючи
n
іk
, розглянемо відсортований список мультисетів , де для кожного мультисету ми вибираємоk
числа{0, 1, ..., n-1}
із повторами.
Наприклад, для n=5
і k=3
ми маємо:
[(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4), (0, 1, 1), ( 0, 1, 2), (0, 1, 3), (0, 1, 4), (0, 2, 2), (0, 2, 3), (0, 2, 4), (0, 3, 3), (0, 3, 4), (0, 4, 4), (1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4), (1, 2, 2), (1, 2, 3), (1, 2, 4), (1, 3, 3), (1, 3, 4), (1, 4, 4) , (2, 2, 2), (2, 2, 3), (2, 2, 4), (2, 3, 3), (2, 3, 4), (2, 4, 4), ( 3, 3, 3), (3, 3, 4), (3, 4, 4), (4, 4, 4)]
- Частина являє собою список мультимножин з тим властивістю , що розмір перетину всіх мультимножин в частині, щонайменше
k-1
. Тобто ми беремо всі мультисети і перетинаємо їх (використовуючи мультисезонне перехрестя) всі відразу. Як приклад,[(1, 2, 2), (1, 2, 3), (1, 2, 4)]
це частина, оскільки її перетин має розмір 2, але[(1, 1, 3),(1, 2, 3),(1, 2, 4)]
це не так, оскільки його перетин має розмір 1.
Завдання
Ваш код повинен містити два аргументи n
і k
. Потім слід жадібно пройти ці мультисети в упорядкованому порядку і вивести частини списку. Для випадку n=5, k=3
правильний розподіл:
(0, 0, 0), (0, 0, 1), (0, 0, 2), (0, 0, 3), (0, 0, 4)
(0, 1, 1), (0, 1, 2), (0, 1, 3), (0, 1, 4)
(0, 2, 2), (0, 2, 3), (0, 2, 4)
(0, 3, 3), (0, 3, 4)
(0, 4, 4)
(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 1, 4)
(1, 2, 2), (1, 2, 3), (1, 2, 4)
(1, 3, 3), (1, 3, 4)
(1, 4, 4)
(2, 2, 2), (2, 2, 3), (2, 2, 4)
(2, 3, 3), (2, 3, 4)
(2, 4, 4)
(3, 3, 3), (3, 3, 4)
(3, 4, 4), (4, 4, 4)
Ось ще один приклад для n = 4, k = 4
.
(0, 0, 0, 0), (0, 0, 0, 1), (0, 0, 0, 2), (0, 0, 0, 3)
(0, 0, 1, 1), (0, 0, 1, 2), (0, 0, 1, 3)
(0, 0, 2, 2), (0, 0, 2, 3)
(0, 0, 3, 3)
(0, 1, 1, 1), (0, 1, 1, 2), (0, 1, 1, 3)
(0, 1, 2, 2), (0, 1, 2, 3)
(0, 1, 3, 3)
(0, 2, 2, 2), (0, 2, 2, 3)
(0, 2, 3, 3), (0, 3, 3, 3)
(1, 1, 1, 1), (1, 1, 1, 2), (1, 1, 1, 3)
(1, 1, 2, 2), (1, 1, 2, 3)
(1, 1, 3, 3)
(1, 2, 2, 2), (1, 2, 2, 3)
(1, 2, 3, 3), (1, 3, 3, 3)
(2, 2, 2, 2), (2, 2, 2, 3)
(2, 2, 3, 3), (2, 3, 3, 3)
(3, 3, 3, 3)
Роз'яснення того, що означає жадібність: Для кожного мультисети по черзі ми дивимось, чи можна його додати до існуючої частини. Якщо ми можемо, ми додамо його. Якщо це не вдається, ми починаємо нову частину. Ми дивимося на мультисети в упорядкованому порядку, як у наведеному вище прикладі.
Вихідні дані
Ви можете вивести розділ у будь-якому розумному форматі, який вам подобається. Однак мультисети слід записати горизонтально на одному рядку. Тобто окремий мультисет не повинен писатися вертикально або розкидатися на кілька рядків. Ви можете вибрати, як ви розділите подання частин у висновку.
Припущення
Ми можемо припустити, що n >= k > 0
.
(0, 4, 4)
по собі? З огляду на ваш опис, я думаю, що його "частиною" буде (0, 4, 4), (1, 4, 4), (2, 4, 4), (3, 4, 4), (4, 4, 4)
. Аналогічно (0, 0, 3, 3)
у другому тестовому випадку.