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

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为止)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值