Bir vektör bölümü, bir vektörü, toplamları orijinal olacak şekilde bir dizi vektöre böler. İşte birkaç bölüm:
[3, 1, 2] = [3, 1, 2]
[3, 1, 2] = [0, 0, 1] + [0, 0, 1] + [0, 1, 0] + [1, 0, 0] + [2, 0, 0]
[3, 1, 2] = [1, 1, 2] + [2, 0, 0]
Burada vektör ekleme element olarak yapılır. Geçerli bir bölüm negatif tamsayılara sahip vektörler veya tamamen sıfır vektörü içermez.
Şimdi zorluk, hedef vektör verilen tüm olası vektör bölümlerini üreten bir program veya fonksiyon yazmaktır. Bu nispeten kolay gelebilir ...
... ama bir bükülme var. Giriş vektörü L boyutuna sahipse ve oluşturduğu en büyük bölüm M öğelerine sahipse, O (L * M) belleğinden fazlasını kullanamazsınız.
Bir tamsayı O (1) bellek kullandığını varsayabilirsiniz. Bu, bölümleri oluştururken çıktı almanız gerektiği anlamına gelir. Bunun da ötesinde, her bölümü yalnızca bir kez çıktılamanız gerekir. Örneğin, bunlar aynı bölümdür:
[3, 1, 2] = [3, 0, 2] + [0, 1, 0]
[3, 1, 2] = [0, 1, 0] + [3, 0, 2]
Her iki çıktıyı da çıkarırsanız, cevabınız geçersizdir.
Tüm bölümler [3, 2]
:
[3, 2]
[0, 1] + [3, 1]
[0, 1] + [0, 1] + [3, 0]
[0, 1] + [0, 1] + [1, 0] + [2, 0]
[0, 1] + [0, 1] + [1, 0] + [1, 0] + [1, 0]
[0, 1] + [1, 0] + [2, 1]
[0, 1] + [1, 0] + [1, 0] + [1, 1]
[0, 1] + [1, 1] + [2, 0]
[0, 2] + [3, 0]
[0, 2] + [1, 0] + [2, 0]
[0, 2] + [1, 0] + [1, 0] + [1, 0]
[1, 0] + [2, 2]
[1, 0] + [1, 0] + [1, 2]
[1, 0] + [1, 1] + [1, 1]
[1, 1] + [2, 1]
[1, 2] + [2, 0]
Cevabınızı test etmek için çalıştırın [3, 2, 5, 2]
. Her biri toplamı [3, 2, 5, 2]
ve hepsi benzersiz olan 17939 bölümleri oluşturmalıdır (her bölümü ilk olarak sözlükbilimsel olarak sıralayarak benzersizliği test edebilirsiniz).
Bayt cinsinden en kısa kod kazanır.