本文主要是介绍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=1∑m−1Ci
而当前我们投入的硬币是 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∗(k−1)>i=1∑m−1Ci
就可以知道 C m > ∑ i = 1 m − 1 C i k − 1 C_m > \frac{\sum_{i = 1}^{m-1} C_i}{k-1} Cm>k−1∑i=1m−1Ci
而这个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";
}
这篇关于Codeforces Round 926 (Div. 2) C. Sasha and the Casino (博弈论*1400)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!