Pertama, beberapa definisi:
- Diberikan
n
dank
, pertimbangkan daftar multiset yang diurutkan , di mana untuk setiap multiset kami memilihk
angka{0, 1, ..., n-1}
dengan pengulangan.
Misalnya, untuk n=5
dan k=3
, kami memiliki:
[(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)]
- Sebuah bagian adalah daftar multisets dengan properti yang ukuran persimpangan semua multisets di bagian setidaknya
k-1
. Yaitu kita mengambil semua multiset dan memotongnya (menggunakan persimpangan multiset) sekaligus. Sebagai contoh,[(1, 2, 2), (1, 2, 3), (1, 2, 4)]
adalah bagian karena persimpangannya berukuran 2, tetapi[(1, 1, 3),(1, 2, 3),(1, 2, 4)]
tidak, karena persimpangannya berukuran 1.
Tugas
Kode Anda harus mengambil dua argumen n
dan k
. Maka harus dengan rakus pergi melalui multisets ini dalam urutan dan output bagian daftar. Untuk kasus ini n=5, k=3
, partisi yang benar adalah:
(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)
Berikut adalah contoh lain untuk 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)
Klarifikasi tentang apa yang serakah artinya: Untuk setiap multiset pada gilirannya kita melihat apakah itu dapat ditambahkan ke bagian yang ada. Kalau bisa kita tambahkan saja. Jika tidak bisa kita mulai bagian baru. Kami melihat multiset dalam urutan seperti pada contoh di atas.
Keluaran
Anda dapat menampilkan partisi dalam format apa pun yang Anda suka. Namun, multiset harus ditulis secara horizontal pada satu baris. Itu adalah multiset individu tidak boleh ditulis secara vertikal atau tersebar di beberapa baris. Anda dapat memilih bagaimana Anda memisahkan representasi bagian-bagian dalam output.
Asumsi
Kita bisa berasumsi itu n >= k > 0
.
(0, 4, 4)
dengan sendirinya? Dengan uraian Anda, saya akan berpikir "bagian" akan menjadi (0, 4, 4), (1, 4, 4), (2, 4, 4), (3, 4, 4), (4, 4, 4)
. Demikian pula untuk (0, 0, 3, 3)
pada test case kedua.