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";    
}
posted @ 2025-05-29 09:25  _Yxc  阅读(22)  评论(0)    收藏  举报