교육 Codeforces 라운드 66 (사업부 정격. 2)

영웅에서 제로에 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 ; 
}

 

추천

출처www.cnblogs.com/Vampire6/p/10990374.html