Official

C - Many Balls Editorial by blackyuki


別解を紹介します。

まず、操作を逆順に見ていきます。

\(N\) が奇数ならば魔法 \(A\) の逆操作、\(N\) が偶数ならば魔法 \(B\) の逆操作を行うということを繰り返すと、最終的に \(N\)\(0\) になります。

ここで、魔法 \(A\) の逆操作とは \(N\) から \(1\) 引くこと、操作 \(B\) の逆操作とは \(N\)\(2\) で割ることを意味します。

実装例(C++)

#include <bits/stdc++.h>
using namespace std;

int main(){
    long long n; cin >> n;
    string ans;
    while(n > 0){
        if(n % 2){
            ans += 'A'; n--;
        }
        else{
            ans += 'B'; n /= 2;
        }
    }
    reverse(ans.begin(), ans.end());
    cout << ans << endl;
}

posted:
last update: