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

hamayanhamayan's blog

letinopia raoha [yukicoder No.745]

https://yukicoder.me/problems/no/745

解説

https://yukicoder.me/submissions/293887

クリアできない場合を先に処理しよう。
D=10ならばクリアできないので"Impossible"
 
最適戦略を考えると、倍率が高い状態でperfectを出したいので、
最初になるべくgreatを出し、その後perfectを出し続ける戦略である。
これをシミュレートすると答え。

int A, B, C, D;
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> A >> B >> C >> D;

    if (D == 10) {
        cout << "Impossible" << endl;
        return;
    }

    int ans = 0, p = 1, cnt = 0;
    rep(i, 0, B) {
        ans += 50 * p;
        cnt++;
        if (cnt % 100 == 0) p *= 2;
    }
    rep(i, 0, A) {
        ans += 100 * p;
        cnt++;
        if (cnt % 100 == 0) p *= 2;
    }

    cout << "Possible" << endl;
    cout << ans << endl;
}