はまやんはまやんはまやん

hamayanhamayan's blog

Many Oranges [パナソニックプログラミングコンテスト(AtCoder Beginner Contest 195) B]

https://atcoder.jp/contests/abc195/tasks/abc195_b

解説

https://atcoder.jp/contests/abc195/submissions/20907660 パッと見て、O(1)で判定ができそうな感じがするが、
結構注意しないと境界条件が怪しくなりそうな感じもする。
本番はそれもあって飛ばしてしまったが、全探索ができるのか。なるほど。

全探索

可能性のある、選ばれるみかんの個数は最大W*1000個である。
つまり、最大106であり、これは全探索可能。
判定もそれほど難しくないので、これなら怪しい境界条件を気にせずに済む。

choose個選んだとすると、Achoose~Bchooseの数を作ることができるので、
その条件が満たされる中で、最小値と最大値を求めればいい。
条件を満たすものがない場合は、初期値のまま残るので、初期値のままなら
UNSATISFIABLEをこたえる。

int A, B, W;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> A >> B >> W;
    W *= 1000;

    int mi = inf, ma = -1;
    rep(choose, 1, W + 1) {
        int L = choose * A;
        int R = choose * B;
        if (L <= W && W <= R) {
            chmin(mi, choose);
            chmax(ma, choose);
        }
    }

    if (mi == inf) cout << "UNSATISFIABLE" << endl;
    else cout << mi << " " << ma << endl;

}