Description
两人取一堆n个石子 先手不能全部取完 之后每人取的个数不能超过另一个人上轮取的数*K。取完最后一个石子的人获胜。给n,K判断先手必胜并求第一步。
Input
输入文件名为 stone.in。
第一行为一个正整数t(1<=t<=10),表示共t组测试数据
接下来t行,每行包括两个正整数n,k
Output
输出文件名为stone.out。
共t行,第i行先输出“Case i: ”(不包括引号),接着输出结果,若先手有必胜策略则输出第一次取的石子数(答案不唯一,输出第一步最小选几),否则输出lose。
Sample Input
5
16 1
11 1
32 2
34 2
19 3
Sample Output
Case 1: lose
Case 2: 1
Case 3: 3
Case 4: lose
Case 5: 4
Data Constraint
Hint
对于10%的数据k=1;
对于30%的数据1<=k<=2;
对于100%的数据2<=n<=100000000,1<=k<=100000。
解题思路:一开始看到题目,觉得应该是有规律的,但是找不出。既然找不出规律,就可以自己创造规律来做。我们创造数列a,b。一开始a[0] = 0,b[0] = 0.
当当前第i项小于n时,我们可以执行以下操作:
1.b[i+1] = a[i] + 1;
2.我们在i前面找一项t,使得a[t] * k >=a[i]。
3.如果a[t-1]=a[i],则b[i]=a[i] + b[t];
否则因为要用最大的a[t]来构造b[i],但是没有,所以为了满足条件,b[i] = a[i];
构造完后,我们看看第i项是否是否等于n,是的话就输出lose,否则将n分解成
从第i项到第某项的和(大于n为止)。