以下の内容はhttps://blog.hamayanhamayan.com/entry/2019/11/24/231012より取得しました。


Buy an Integer [AtCoder Beginner Contest 146 C]

https://atcoder.jp/contests/abc146/tasks/abc146_c

前提知識

解説

https://atcoder.jp/contests/abc146/submissions/8630477

x<yを満たすならばxの値段<yの値段を必ず満たす。
よって、所持金Xの境界線がどこにあるかを割り出せばいい。
これは二分探索を使おう。
check(x) := xを買うときの値段
これがX以下ならok, Xより大きいならngとして境界を詰めていく。

ll A, B, X;
//---------------------------------------------------------------------------------------------------
ll check(ll x) {
    ll dx = to_string(x).length();
    return A * x + B * dx;
}
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> A >> B >> X;
    ll ok = 0, ng = 1000000001;
    while (ok + 1 != ng) {
        ll md = (ok + ng) / 2;
        if (check(md) <= X) ok = md;
        else ng = md;
    }
    cout << ok << endl;
}



以上の内容はhttps://blog.hamayanhamayan.com/entry/2019/11/24/231012より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14