Codeforces Round 926 (Div. 2) CC. Sasha and the Casino (Java)
比赛链接:Codeforces Round 926 (Div. 2)
C题传送门:C. Sasha and the Casino
题目:C. Sasha and the Casino
**Example **
input
2 1 7
2 1 1
2 3 15
3 3 6
4 4 5
5 4 7
4 88 1000000000
25 69 231
13 97 18806
output
NO
YES
NO
NO
YES
NO
NO
NO
分析:
只要证明下注可以赚钱,即可输出答案。
首先,我们需要明白赌场可以操控我们的输赢,但不能连输超过x次,即赌场可以让我们连续输x次,但第x+1次我们一定赢。
所以,每一次下注,我们需要保证:该次下注如果赢了,我们至少能够赚钱,即 总硬币>a。
sum:之前已经花的钱
now:该次最少下注的钱
sum + now < k * now
now * (k - 1) > sum
now = sum / (k - 1) +1
对于第1次下注,由于之前没有下注,默认sum = 1。
循环从第2次下注开始,第 x+1 次结束,如果下注的钱大于a,说明下注的钱不够,一定会输。
第2到x次下注我们假设赌场让我们输,则第x+1次我们必赢。
代码:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int tr = sc.nextInt();
while(tr-->0) {
int k = sc.nextInt();
int x = sc.nextInt();
long a = sc.nextLong();
boolean flag = true;
// 花费的钱,默认第一把输
long sum = 1;
for(int i = 2;i <=x+1;i++) {
// 打算付的钱
long now = sum/(k-1)+1;
sum += now;
if(sum > a) flag = false;
// System.out.printf("now sum:%d %d\n",now,sum);
}
if(flag) System.out.println("YES");
else System.out.println("NO");
}
sc.close();
}
}