您的位置:首页 > 其它

3033. 【NOIP2012模拟10.17】石子游戏

2016-09-23 20:05 253 查看
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为止)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  构造规律