소개
다음 순서 (음수가 아닌 정수)를 살펴 보겠습니다.
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, ...
예를 들어 처음 세 숫자를 봅시다 . 이들은입니다 0, 1, 2
. 이 순서에 사용 된 숫자는 6 가지 방법 으로 주문할 수 있습니다 .
012 120
021 201
102 210
F (3) = 6 이라고합시다 . 또 다른 예는 F (12) 입니다. 여기에는 숫자가 포함됩니다.
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
또는 연결된 버전 :
01234567891011
이를 재정렬하는 방법을 찾으려면 먼저이 문자열의 길이를 살펴 봐야합니다. 이 문자열의 길이는 14
입니다. 우리는 14 를 계산합니다 ! . 그러나 예를 들어 최종 문자열을 방해하지 않고 장소를 교환 할 수 있습니다. 2 개의 0이 있으므로 2가 있습니다! 순서를 방해하지 않고 0 을 바꾸는 방법 . 4 개도 있으므로 4 개가 있습니다 ! 그것들을 전환하는 방법. 총계를이 두 숫자로 나눕니다.
이것은 14입니다! / (4! × 2!) = 1816214400 문자열 정렬 방법 01234567891011
. 따라서 F (12) = 1816214400 이라고 결론을 내릴 수 있습니다 .
작업
N이 주어지면 F (N)을 출력하십시오 . 소개가 필요없는 사람들을 위해. F (N)을 계산하기 위해 먼저 첫 번째 N 개의 음이 아닌 정수를 연결하고 (예 : N = 12의 경우 연결된 문자열은 01234567891011
)이 문자열을 배열하는 방법의 수를 계산합니다.
테스트 사례
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
노트
답을 계산하는 것은 내에서 계산해야 10 초의 시간 제한 , 짐승 - 강제가 되어 허용 .
이것은 code-golf 이므로 바이트 수가 가장 적은 제출이 승리합니다!
10
숫자는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
입니다. 다른 10 자리 숫자이므로 결과는 10!입니다.
0
사건이 내 카운트를 버리고 있다고 생각한다 (멍청한 빈 줄).
F(N)
되지 않습니다 O(N!)
그것은 log F(N)
이다 O(log N!)
하지만 사람들은 그냥 직감입니다
10
정확합니까? 반복 숫자가 시작되는 위치이므로 10보다 작아야합니다!