kou6839の日記

c++ 競プロ(特にcsacademy) linuxについて書きます。普段は自動車屋さんでナビ開発してます。転職先を探しています!!。

CSAcademy Win Percentages

csacademy.com

<問題>
2回にわけて同じゲームを行う。
はじめG_1回ゲームをしていて勝率P_1%だった。(P_1は少数以下切り捨て)
その後ゲームして、G_2回ゲーム(累計)をし勝率P_2%になった。(つまり、追加でG_2-G_1回ゲームをした結果勝率がP_2になった。)
追加ゲーム中に勝った数を最大にするとき、その回数はいくつか。

<解説>
勝率が小数点以下切り捨てなので、初回のゲームではP_1\%のまま、
2回目のゲーム後では(P_2+0.99999...)\%のようにすればよいです。
ゲーム回数は10^6であるため、初回、2回目の勝った回数を全探索し、上記の勝率になるように更新します。

その後追加のゲーム回数と比較し、どちらか小さいほうが答えになります。

<コード>

int main() {
	cin.tie(0);
	ios::sync_with_stdio(false);

	int g1, p1, g2, p2;
	cin >> g1 >> p1 >> g2 >> p2;

	int ans1 = 0;
	rep(i, g1 + 1) {
		if (i * 100 / g1 == p1) {
			ans1 = i;
			break;
		}
	}

	int ans2 = 0;
	rep(i, g2 + 1) {
		if (i * 100 / g2 == p2) {
			ans2 = i;
		}
	}
	P(min(g2-g1,ans2 - ans1));
	return 0;
}

<感想>
ここ最近の問題の中では一番易しい