【五校联考2day2】恐怖的奴隶主

Description

在《炉石传说》这款游戏中,有一张随从卡牌叫做“恐怖的奴隶主”。这张卡牌的描述是这样的:每当该随从受到伤害且没有死亡,召唤另一个恐怖的奴隶主。还有一张卡牌叫做“旋风斩”,描述是“对所有随从造成1点伤害”。使用“旋风斩”后,生命值变为0的“恐怖的奴隶主”并不会立即死亡,而会先结算召唤新的“恐怖的奴隶主”再结算生命值为0的“恐怖的奴隶主”的死亡。当然,使用旋风斩后,生命值变为0的“恐怖的奴隶主”不会召唤新的“恐怖的奴隶主”。随从的数量是有上限的,在召唤一个随从前如果随从数量已经达到上限则不会召唤。现在,如果随从数量上限为k,最开始只有一个生命值为m的“恐怖的奴隶主”,而且新召唤出来的“恐怖的奴隶主”的生命值也是m,那么使用了n张“旋风斩”后还有多少个“恐怖的奴隶主”呢?

Sample Input

4 3 7

Sample Output

6

【样例说明】
初始有1个生命值为3的“恐怖的奴隶主”。
第1次旋风斩后,召唤了1个“恐怖的奴隶主”,剩余1个生命值为2的和1个生命值为3的。
第2次旋风斩后,召唤了2个“恐怖的奴隶主”,剩余1个生命值为1的、1个生命值为2的和2个生命值为3的。
第3次旋风斩后,召唤了3个“恐怖的奴隶主”,然后1个生命值为0的死亡,剩余1个生命值为1的、2个生命值为2的和3个生命值为3的。
第4次旋风斩后,试图召唤5个“恐怖的奴隶主”,但随从数量达到上限7,所以只召唤了1个,然后其中1个生命值为0的死亡,最后剩余2个生命值为1的、3个生命值为2的和1个生命值为3的,共6个。

Data Constraint

对于10%的数据,n,k<=10^3;
另有15%的数据,n,m<=10^5;
另有25%的数据,m<=10^5;
另有20%的数据,10^8<=n,m,k<=10^9;
对于全部数据,n,m,k<=10^15。


分析

这题的正解是找规律,没错!就是找规律,我刚看到题解是也很意外(我还以为是矩阵乘法)

我们先来想个部分分算法:
我们很容易就想到用一个数组来存人数,用一个指针来指向满血和0血的分界线,
每次都把在场的每个人血量减一,那么就等于把指针移动一位,这样每个人的血量减了一,移动后腾出的一位就放当前满血的人数。
数组+滚动指针:25分

我们还可以证明一定会有一堆连续的0,不为0的状态一定很少,所以可以把这堆0压缩
加上这个优化还可以水点分

正解为找出循环节再计算答案

循环节???什么鬼!!!

来来来,我们先来模拟一下样例:

轮数\此血量的人数0123活的人数
000011
100112
201124
311236
412316
523115
631124
711236
发现了什么??? Someting Special???

我们发现当k被填满时,循环节就出现了,而且长度必须是(m+1),证明显然
这下n就可以直接变成n=n mod(m+1)了,
这时, ans=ans(0) ,血为0的人数就是mod以后当前场上血量为n的人数(注意算上压缩的0).

SO,
AC,收工!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值