腾讯第二次笔试:花匠小Q

#花匠小Q的解题思路
如果k是0的话,不管花的数量有多少,都只有一种放花方案;
如果k不是0的话,假设a = k * count,count表示倍数,如果花的数量大于等于a时,那么放花方案就会有 elem - a + 1种,即把a个白花看成一朵花,那么白花红花在elem - a 个位置上有几种方法,即为组合数C( elem - a + 1,1),也就数 elem - a + 1。

nums = [int(n) for n in input().split()]
t = nums[0]
k = nums[1]
result = []

for _ in range(t):
    
    number = [int(n) for n in input().split()]
    sum_ = 0
    for index,elem in enumerate(range(number[0],number[1] + 1)):
        
        count = 1
        basic = k
        flag = True
        while(flag):
            
            if elem >= basic * count:
                
                sum_ = sum_ + elem - basic * count + 1
                count += 1
                
            else:
                flag = False
            
                sum_ += 1
            
    result.append(sum_)
    
for index in range(t):
    print(result[index]

这是交了卷之后才调好的,不知道对不对,欢迎大家指正。
#腾讯##笔试题目#
全部评论
别想复杂了。。dp[i]=dp[i-1]+dp[i-k],dp[i-1]是放红花,前面怎么都无所谓,所以-1,另一个放白花,这样最后k个都得是白花,所以-k,维护个前缀和就行了。 刚在群里看到求出dp[]后,直接切片sum这也能过
点赞 回复 分享
发布于 2019-09-01 23:38
应该不对。按你的思路剩下来的elem-a个位置是elem-a+1  实际上剩下来的位置可以放置很多情况,比如k倍数的白花
点赞 回复 分享
发布于 2019-09-01 23:24
帮你跑了一下,不太对哦
点赞 回复 分享
发布于 2019-09-01 23:06
我按这么做超时了
点赞 回复 分享
发布于 2019-09-01 23:01

相关推荐

评论
点赞
6
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务