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();}
}