ヒーローからゼロへの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に到達するまでのステップ数の最小値を計算するように求められます。
入力
クエリの数-最初の行は1つの整数T(1≤t≤100)を含みます。
各クエリの唯一のラインは、二つの整数N含有
及びk(1≤n≤1018、2≤k≤1018を)。
出力
クエリごとに0に到達するためのステップの最小数を印刷する
単一の行におけるnから
例
intput
2
59 3
1000000000000000000 10
出力
8
19
問題の意味
あなたに2つの数値を与えるN、K、nは次の2つのステップのそれぞれを通過する必要があります** ** 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> 使用して 名前空間STDを、 typedefの長い 長い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 。 }