頭良くなりたい人

文系大学生shadeのブログです。競技プログラミングや人文学の話題,受験ネタなど。

ABC161 C - Replacing Integer

問題はこちら
atcoder.jp

方針

例3が見るからにTLEを誘っているので,馬鹿正直に題意の操作をするのは断念。

N \geq K のとき,題意の操作により NN-K, (N-K)-K, ... となっていきます。N < K となるまでこの操作を続ける( \LeftrightarrowNK で割り切れなくなるまで割る)と,N = rr : NK で割った余り)となり,以後 N < K のときに合流します。

問題は N < K のときですが,これは操作を続けても NK - N にしかならないので,このうち小さい方を出力すればいいですね。

コード

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    long n,k;
    cin>>n>>k;
 
    long surplus=n%k;
 
    if(n>=k){
        cout<<min(surplus,k-surplus)<<endl;
    }else{
        cout<<min(n,k-n)<<endl;
    }
}