When good old friends are going away
Will yo
|

run-away

园龄:1年7个月粉丝:1关注:0

2024-12-20 15:34阅读: 4评论: 0推荐: 0

「CF1929C」 Sasha and the Casino

题意

最开始有 \(a\) 个金币,每次你可以选择 \(y\in[1,a]\) 个金币交给赌场赌博,赌场决定胜负(反正不是你决定)。如果胜,就获得 \(ky\) 个金币;否则获得 \(0\) 个金币。赌场保证你最多连输 \(x\) 次。

\(t\) 组询问,每次给出 \(k,x,a\),求是否能获得任意数量的金币。

分析

对于小于等于当前数量的金币数,肯定可以一次获得。

所有我们只要求是否能在 \([1,x]\) 次内使金币数增加。

设第 \(i\) 次赌博投入 \(c_i\) 个金币,其中 \(c_0\) 肯定为 \(1\)

对于已经输了 \(i\) 次的一次赌博,如果本局赢且能增加数量,那么肯定满足 \(\sum\limits^{i+1}_{j=0}c_j<k\times c_{i}\)

消掉一个 \(c_{i}\),移项得 \(\frac{\sum\limits^{i-1}_{j=0}c_j}{k-1}<c_{i}\)

所以得 \(c_{i}\) 最小为 \(\lfloor \frac{\sum\limits^{i-1}_{j=0}c_j}{k-1}\rfloor+1\)

其中 \(\sum\limits^{i-1}_{j=0}c_j\) 可以用前缀和处理。循环 \(1\sim x\),判断当前若 \(sum>a\),即花销大于拥有的数了,就直接输出 NO

总时间复杂度 \(O(tx)\)

Code

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
#define dbg(x) cout<<#x<<": "<<x<<"\n"
inline ll read(){ll x=0,f=1;char c=getchar();while(c<48||c>57){if(c==45)f=0;c=getchar();}while(c>47&&c<58)x=(x<<3)+(x<<1)+(c^48),c=getchar();return f?x:-x;}
const ll mod=998244353,maxn=1e2+5,maxt=505;
ll t,k,x,a,s,c[maxn]={1};
inline void solve(){
k=read(),x=read(),a=read(),s=1;
for(ll i=1;i<=x;++i){
c[i]=s/(k-1)+1;
if(s>a){puts("NO");return;}
s+=c[i];
}
if(s<=a)puts("YES");
else puts("NO");
return;
}
signed main(){
t=read();
while(t--)solve();
return 0;
}

本文作者:run-away

本文链接:https://www.cnblogs.com/run-away/p/18144017

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   run-away  阅读(4)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起