欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > Codeforces Round 926 (Div. 2) C. Sasha and the Casino (博弈论*1400)

Codeforces Round 926 (Div. 2) C. Sasha and the Casino (博弈论*1400)

2025/3/17 9:49:33 来源:https://blog.csdn.net/2302_79440616/article/details/141571013  浏览:    关键词:Codeforces Round 926 (Div. 2) C. Sasha and the Casino (博弈论*1400)

在这里插入图片描述
在这里插入图片描述
这里的意思是想让我们求得是否是能够实现不停地无上限的赚钱。

这里注意避开一个思维误区,如果你想的是前x次一直用1枚硬币然后吃第x+1次保底,那么就是错误的。你应该考虑到如果前x次里面出现了胜利呢?这时候你拿着一枚硬币根本赚不回本。

所以我们要假定:前x+1次,每一次都有可能胜利,并且每次胜利我们都需要使得自己能够赚回本金并且获得利润。
那么我们要怎么做才能够实现?

这里假设我们第i次投入的硬币数量为 C i C_i Ci,那么在投入m次之后,如果现在我们恰巧胜利了,那么我们需要赚回的硬币至少要大于: ∑ i = 1 m − 1 C i \sum_{i = 1}^{m-1} C_i i=1m1Ci

而当前我们投入的硬币是 C m C_m Cm,那么我们就可以得到: C m ∗ ( k − 1 ) > ∑ i = 1 m − 1 C i C_m*(k - 1) > \sum_{i = 1}^{m-1} C_i Cm(k1)>i=1m1Ci
就可以知道 C m > ∑ i = 1 m − 1 C i k − 1 C_m > \frac{\sum_{i = 1}^{m-1} C_i}{k-1} Cm>k1i=1m1Ci

而这个m就代表了前x+1次里面的每一次我们都要这么计算,只需要维护一个前缀和变量就可以了,如果到x+1中间出现了花费大于本金,那么就一定没办法一直赚钱。

void solve(){int k,x,a;cin >> k >> x >> a;int s = 0;for(int i = 1;i <= x + 1;i++){s += s/(k - 1) + 1;if(s > a){cout << "NO\n";return;}}cout << "YES\n";
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词