2017-04-10 9 views
1

정수 k의 모든 자릿수가 감소하지 않는 순서로 N보다 작거나 같은 가장 큰 양의 정수 (k라고 함)는 무엇입니까?비 - 감소 자릿수가 가장 큰 숫자

구속 :
1 < = N < = 10^18
1 < = K < = N
시간 제한 : 용액의

한 모든 검사된다 8 초 N-1에서 시작하는 값 (즉, N-1, N-2, N-3, .....)이 아닌 숫자로 숫자를 찾습니다.
그러나 N < = 10^10 인 경우에만 주어진 제한 시간 내에이를 수행 할 수 있습니다.
주어진 제약 조건의 시간 제한을 초과했습니다 (N < = 10^18).

+1

Google Codejam 2017 인증 라운드에서 문제 B에 대한 분석을보세요. https://code.google.com/codejam/contest/3264486/dashboard#s=a –

+1

나는 당신이 적어도 질문을 게시하고 다른 사람들에게 당신을 위해 그것을 해결하도록 요청하기보다는 문제를 해결하려고 시도하십시오. – TheGreatContini

답변

1

간단한 검색 방식은 오른쪽에서 숫자를 검색하는 것입니다. 왼쪽 숫자를 찾으면 왼쪽 숫자를 1으로 줄이고 현재 숫자의 모든 숫자를 오른쪽 끝자리는 9입니다.

예는 : 결과 숫자는 확실히 원래보다 작을 수 있기 때문에

132 -> 1 3 2 

2 < 3 so replace 2 by 9 and decrease 3 by 1 

당신은이 작업을 수행 할 수 있습니다. 또한 숫자를 최대화하여 숫자를 최대 가능 자릿수 9으로 바꾸고 결과 숫자를 최대화하기 위해 가능한 최소 자릿수 숫자 1을 줄이려고합니다.

올바른 번호를 찾을 때까지 왼쪽의 모든 숫자에 대해이 과정을 반복하십시오. 그리고 네 모퉁이의 경우 (선행 0)를 확인하십시오. >1329 - ->1299 (유효 숫자)

그래서 답이 될 것입니다 12991332

1332에 대한

.

+2

이 알고리즘을 사용하면 감소 프로세스가 수행 될 때 감소 된 숫자가 규칙을 충족하는지 확인하기 위해 뒤로 봐야합니다. 전의. '1329'가 아닌'1332' ->'1299'입니다. –

+0

예, 오른쪽에서 왼쪽으로 스캔하는 동안 올바른 번호를 찾을 때까지 프로세스를 반복해야합니다. –