제목에서 알 수 있듯이이 문제는 @NP 의 Polite Near-Sighted Drunk Bot에 의해 반 영감 을 받았습니다.
우리의 빈약 한 봇은 원점에서 데카르트 그리드에 배치되며, 1 분마다 4 개의 방향 중 하나 (위, 아래, 왼쪽, 오른쪽)로 1 단위 씩 움직입니다.
n 분이 지나면 그리드의 모든 잠재 광산이 활성화되어 불쌍한 봇을 죽입니다. 지뢰는 방정식 | y | = | x |를 만족하는 모든 정수 좌표에 위치합니다.
도전
당신이 제공됩니다 n은 입력으로, 광산 폭발하기 전에 시간 (분)을, 그리고 봇이라고 출력으로, 당신은 가능성을 발견해야한다 죽은 .
입력 : n을 나타내는 자연수 .
출력 : 봇이 죽을 확률을 p / q로 설정하십시오. 여기서 p와 q는 비교적 소수입니다 (q는 0이 아니라 p는 가능). 출력 p.
규칙
- 알고리즘 이 지수 이상으로 실행 되어서는 안됩니다 . 다항식 시간 이하로 실행하는 것이 이상적입니다.
- 알고리즘은
n
적절한 시간 에 <20의 입력을 처리 할 수 있어야합니다 (너무 세게 조정될 수 있음). - 이것은 코드 골프 도전입니다.
- 주어진 n에 대한 모든 가능성을 반복 하는 것은 대답으로 받아 들여지지 않을 것입니다.
테스트 사례
1
->0
2
->3
4
->39
6
->135
8
->7735
10
->28287
n = 6에 대한 계산 예
U, D, R 및 L의 4 가지 이동이 가능합니다. 취할 수있는 총 경로 수는 4 ^ 6 또는 4096입니다. y = x : x, y = 선을 따라 4 가지 가능한 경우가 있습니다. ± 1; x, y = ± 2; x, y = ± 3; 또는 x = y = 0입니다. 우리는 (1,1), (2,2) 및 (3,3)에서 끝나는 방법의 수를 세고 다른 사분면을 설명하기 위해 4를 곱합니다. 이것은 (0,0)에 끝나는 방법의 수입니다.
사례 1 : 봇은 (3, 3)에서 끝납니다. 봇이 여기에 오게하려면 오른쪽으로 3 번, 위쪽으로 3 번 움직여야합니다. 즉, 여기에 오는 총 방법 수는 시퀀스 RRRUUU에서 문자를 재배 열하는 방법입니다. 6은 3 = 20을 선택합니다.
사례 2 : 봇은 (2,2)에서 끝납니다. 봇이 여기에서 끝나기 위해서는 2 번의 위로 이동, 3 번의 오른쪽 이동 및 1 개의 왼쪽 이동이있을 수 있습니다. 또는 2 개의 오른쪽 이동, 3 개의 위쪽 이동 및 1 개의 아래쪽 이동. 따라서 여기에 도달하는 총 방법 수는 시퀀스 RRRLUU 및 UUUDRR의 문자를 재배 열하는 방법의 합계입니다. 두 방법 모두 (6 choose 1) * (5 choose 2) = 60입니다. .
사례 3 : 봇은 (1,1)에서 끝납니다. 봇이 여기에 오게하려면 오른쪽 이동 1 개, 위쪽 이동 3 개, 아래쪽 이동 2 개가있을 수 있습니다. 이 경우 시퀀스 RUUUDD에서 문자를 재배 열하는 방법의 수는 (6 choose 1) * (5 choose 2) = 60입니다.
1 위로 이동, 3 오른쪽 이동 및 2 왼쪽 이동. 이 경우 시퀀스 URRRLL에서 문자를 재배 열하는 방법의 수는 (6 choose 1) * (5 choose 2) = 60입니다.
2 개의 오른쪽 이동, 1 개의 왼쪽 이동, 2 개의 위쪽 이동 및 1 개의 아래쪽 이동. 이 경우 순서 UUDRRL에서 문자를 재배 열하는 방법의 수는 (6 choose 1) * (5 choose 1) * (4 choose 2) = 180입니다.
따라서 (1,1)에서 끝나는 총 방법 수는 300입니다.
사례 4 : 봇은 (0,0)에서 끝납니다. 봇이 여기에 오게하려면 다음을 수행해야합니다.
3 개의 오른쪽 이동 및 3 개의 왼쪽 이동. 이 경우 시퀀스 RRRLLL에서 문자를 재배 열하는 방법의 수는 (6 choose 3) = 20입니다.
3 위로 이동하고 3 아래로 이동합니다. 이 경우 시퀀스 UUUDDD에서 문자를 재배 열하는 방법의 수는 (6 choose 3) = 20입니다.
1 오른쪽 이동, 1 왼쪽 이동, 2 위쪽 이동 및 2 아래쪽 이동 이 경우 시퀀스 RLUUDD에서 문자를 재배 열하는 방법의 수는 (6 choose 1) * (5 choose 1) * (4 choose 2) = 180입니다.
1 위로 이동, 1 아래로 이동, 2 오른쪽 이동 및 2 왼쪽 이동. 이 경우 시퀀스 RRLLUD에서 문자를 재배 열하는 방법의 수는 (6 choose 1) * (5 choose 1) * (4 choose 2) = 180입니다.
따라서 (0,0)에서 끝나는 총 방법 수는 400입니다.
이 경우들을 합하면 총 | y | = | x | 4 (20 + 120 + 300) + 400 = 2160입니다. 따라서 우리의 확률은 2160/4096입니다. 이 분수가 완전히 줄어들면 135/256이므로 답은 135 입니다.