C. Sasha and the Casino
https://codeforces.com/problemset/problem/1929/C
题意:给定n个硬币,每次赌博的回报率为(k - 1),最多连续输x次。问能否有一种策略,可以无限赚钱?
思路:要无限赚钱的策略,就是说不论在第几轮开始赢,前面输的总能回本。因为要保证可以一直赢,就必须可以承担前面输的代价,一直到x次输完,第x+1次开始赢。或者说,虽然最多连续输x次,但是因为是随机事件,所以可能在[1, x]之间的任意一个数值上连续输,然后在某个数值上一直赢。所以只要保证,在[1,x]之间的任意一个数值上,都能够承担起输的代价,那么就可以无限赢钱。
总结:一开始想找一种策略,来应对所有的情况,但是试了很多策略都无法兼顾所有情形。比如假设在第x+1次才开始赢,那我前x次都投1元,第x+1次把剩下的全投进去,血赚,那问题就简单了。但是题目并不是说一定是第x+1次才开始赢,而是说赢可能发生在[1,x]的任意时刻,但是连续输不会超过x次,这说明,如果能够承担连续输了x次的情况下(并且虽然每次都是输,但是投入的赌注要保证能将之前亏的所有投入都赚回来,因为赢可能发生在[1,x]的任意时间段),那么就是可以无限赢钱的。
inline void solve() {
int k, x, a;
cin >> k >> x >> a;
int tot = 0;
for (int i = 1; i <= x + 1; ++i) {
int need = tot / (k - 1) + 1;
if (a - tot - need < 0) {
cout << "NO\n";
return;
}
tot += need;
}
cout << "YES\n";
}

浙公网安备 33010602011771号