Giriş
Aşağıdaki sırayı izleyelim (negatif olmayan tamsayılar):
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
Örneğin, ilk üç sayıyı ele alalım . Bunlar 0, 1, 2
. Bu sırada kullanılan numaralar altı farklı şekilde sipariş edilebilir :
012 120
021 201
102 210
Diyelim ki F (3) = 6 . Başka bir örnek F (12) . Bu sayıları içerir:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Veya birleştirilmiş sürüm:
01234567891011
Bunu yeniden düzenlemenin yollarını bulmak için, önce bu dizenin uzunluğuna bakmamız gerekir. Bu dizenin uzunluğu 14
. 14 hesaplıyoruz ! . Ancak, örneğin son dizeyi bozmadan yer değiştirebilirler. 2 sıfır var, bu yüzden 2 var! sırayı bozmadan sıfırları değiştirmenin yolları . Ayrıca 4 tane var, bu yüzden 4 tane var! olanları değiştirmenin yolları. Toplamı şu iki sayıya böleriz:
Bu 14 tane var! / (4! × 2!) = 1816214400 dizeyi düzenlemenin yolları 01234567891011
. Böylece F (12) = 1816214400 olduğu sonucuna varabiliriz .
Görev
N verildiğinde , çıkış F (N) . Girişe ihtiyaç duymayanlar için. F (N) 01234567891011
değerini hesaplamak için , önce ilk N negatif olmayan tamsayıları birleştiririz (örneğin, N = 12 için, birleştirilmiş dize olur ) ve bu dizeyi düzenleme yollarının sayısını hesaplarız.
Test senaryoları
Input: Output:
0 1
1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800
11 119750400
12 1816214400
13 43589145600
14 1111523212800
15 30169915776000
Not
Cevabı hesaplanması bir dahilinde hesaplanmalıdır 10 saniyelik süre , zorlaması olduğunu izin .
Bu kod golf , yani en az bayt ile gönderme kazanır!
10
rakamlar 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
. On farklı basamak, bu yüzden sonuç 10 !.
0
dava sayımı attı (aptal boş teller).
F(N)
değildir O(N!)
ve bu log F(N)
olduğunu O(log N!)
ancak bu sadece ... eğilir vardır
10
doğru mu? Tekrar eden rakamların başladığı yer 10'dan az olması gerektiği gibi geliyor.