영웅에서 제로에 A.
주제 링크 : http://codeforces.com/contest/1175/problem/A
이름
OU는 정수 n 및 정수 K 주어진다
: 다음 동작 중 하나를 수행 할 수있는 하나의 단계에서
1만큼 감소를 N;
n은 K로 나눌 경우 K에 의해 N 분할.
예를 들어, N = 27, K = 3 다음 단계를 수행 할 수있는 경우 : 27 → 26 → 25 → 24 → 8 → 7 → 6 → 2 → 1 → 0.
당신은 N에서 0에 도달하기 위해 단계의 최소 수를 계산하라는 메시지가 표시됩니다.
입력
쿼리 수 - 첫 번째 줄은 하나의 정수 t (1≤t≤100)가 포함되어 있습니다.
각 질의의 전용 회선, 두 정수 N 포함
하고 K (1≤n≤1018, 2≤k≤1018 참조).
산출
각 쿼리의 경우 0에 도달하기 위해 단계의 최소 수를 인쇄
한 줄에 N에서
예
INTPUT
2
59 3
1000000000000000000 10
산출
8
(19)
문제의 의미
당신에게 두 개의 숫자 N, K주세요, n은 다음과 같은 두 단계 각각 ** ** 0 출력 주파수가 변환된다 통해 이동해야합니다
하나 N = N-1, N = N / K 중 (전제 N 나눌 K).
생각
너무 큰, 폭력 절대 TLE 시도는 생명의 낭비입니다!
영리한 방법 :
N- 형 % k를! = 0, 단계의 수는 N %의 k 값의 변환, 현재의 경우는 N = N- (마이너스의 단계 수)
N %의 K == 0, 변환이 여러 단계, 현재의 경우는 N = N / K,
N-0이 완료 단계의 누적 값을 출력하는 것이 가능하게된다.
#INCLUDE <비트 / stdc ++ H.> 사용 스페이스 성병; 타입 정의 긴 긴 LL; CONST의 INT maxn 2E5 + = 7 ; INT 의 main () { INT의 T; CIN >> T; 반면 (T-- ) { LL의 N, K; CIN >> N >> K; LL 결과 = 0 ; 동안 (N! = 0 ) { LL 책 = N %의 K; 경우 (책! = 0 ) { 결과+ = 책; N = N - 책; } 다른 { 결과 + = 1 ; N = N / K; } } COUT << 결과 << ENDL; } 반환 0 ; }