pengantar
Mari kita amati urutan berikut (bilangan bulat non-negatif):
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
Sebagai contoh, mari kita ambil tiga angka pertama . Ini adalah 0, 1, 2
. Angka-angka yang digunakan dalam urutan ini dapat dipesan dalam enam cara berbeda:
012 120
021 201
102 210
Jadi, katakanlah F (3) = 6 . Contoh lain adalah F (12) . Ini berisi angka-angka:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
Atau versi gabungan:
01234567891011
Untuk menemukan sejumlah cara untuk mengatur ulang ini, pertama-tama kita perlu melihat panjang string ini. Panjang string ini adalah 14
. Jadi kami menghitung 14! . Namun, misalnya yang dapat bertukar tempat tanpa mengganggu string terakhir. Ada 2 nol, jadi ada 2! cara untuk mengubah angka nol tanpa mengganggu urutannya. Ada juga 4, jadi ada 4! cara untuk beralih. Kami membagi total dengan dua angka ini:
Ada 14! / (4! × 2!) = 1816214400 cara untuk mengatur string 01234567891011
. Jadi kita dapat menyimpulkan bahwa F (12) = 1816214400 .
Tugas
Diberikan N , output F (N) . Untuk mereka yang tidak membutuhkan pengantar. Untuk menghitung F (N), pertama-tama kita menggabungkan bilangan bulat N-negatif pertama (misalnya untuk N = 12, string yang digabungkan akan menjadi 01234567891011
) dan menghitung jumlah cara untuk mengatur string ini.
Uji kasus
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
Catatan
Menghitung jawaban harus dihitung dalam batas waktu 10 detik , brute-force tidak diperbolehkan .
Ini adalah kode-golf , jadi pengiriman dengan jumlah byte paling sedikit menang!
10
Digit pertama adalah 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
. Sepuluh digit berbeda, jadi hasilnya 10!
0
kasus ini melempar hitungan saya (string kosong bodoh).
F(N)
tidakO(N!)
dan itu log F(N)
adalah O(log N!)
tetapi mereka hanya firasat ...
10
benar? Rasanya seperti itu harus kurang dari 10 !, karena di situlah angka yang berulang dimulai.