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; }