用 Python 编写程序检查我们是否可以在最喜欢的一天吃最喜欢的糖果

pythonserver side programmingprogramming更新于 2025/11/30 17:16:17

假设我们有一个正值数组 candiesCount,其中 candiesCount[i] 表示我们拥有的第 i 种类型的糖果数量。我们还有另一个名为 queries 的数组,其中 queries[i] 有三个参数 [favoriteType_i、favoriteDay_i、dailyCap_i]。我们有一些规则:

  • 我们从第 0 天开始吃糖果。

  • 除非我们已经吃完了前 i-1 种类型的所有糖果,否则我们不能吃任何类型 i 的糖果。

  • 我们必须每天至少吃一颗糖果,直到吃完所有糖果为止。

遵循这些规则,我们必须为每个查询结果创建一个布尔值数组,如果我们可以在 favoriteDay_i 天吃掉类型为 favoriteType_i 的糖果,并且每天吃的糖果不超过 dailyCap_i 颗,则第 i 个条目为真。按照规则 2,我们可以在同一天吃不同类型的糖果。

因此,如果输入为 candiesCount = [7,4,5,3,8], queries = [[0,2,2],[4,2,4],[2,13,100]],则输出将为 [true,false,true],因为

  • 如果我们在第 0 天和第 1 天吃 2 颗 0 型糖果,我们将在第 1 天吃一颗 0 型糖果

  • 我们每天最多可以吃 4 颗糖果。如果我们每天吃 4 颗糖果,那么第 0 天我们会吃 4 颗 0 型糖果,第 1 天我们会吃 4 颗 0 型、1 型糖果。那么第 2 天我们只能吃 4 颗 1 型、2 型糖果,所以第 2 天我们不能吃 4 型糖果。

  • 我们每天可以吃 1 颗糖果,第 13 天我们会吃 2 型糖果。

为了解决这个问题,我们将遵循以下步骤 −

  • sumcandy := 具有单个元素 candiesCount[0] 的列表

  • index:= 1

  • while index < candiesCount 的大小,执行

    • 在 sumcandy 末尾插入 (sumcandy[index-1] + candiesCount[index])

    • index := index + 1

  • 在 sumcandy 末尾插入 0

  • res:= a new list

  • 对于查询中的每个,执行

    • typ:= each[0]

    • day:= each[1]

    • cap:= each[2]

    • if day+1 > sumcandy[typ] 或 (day+1)*cap <= sumcandy[typ-1],则

      • 在 res 末尾插入 False

    • 否则,

      • 在 res 末尾插入 True

  • 返回 res

示例

让我们看看下面的实现以便更好地理解 −

def solve(candiesCount, queries):
   sumcandy = [candiesCount[0]]
   index=1
   while index < len(candiesCount):
      sumcandy.append(sumcandy[index-1] + candiesCount[index])
      index+=1
   sumcandy.append(0)
   res=[]
   for each in queries:
      typ=each[0]
      day=each[1]
      cap=each[2]
      if day+1 > sumcandy[typ] or (day+1)*cap <= sumcandy[typ-1]:
         res.append(False)
      else:
         res.append(True)
   return res

candiesCount = [7,4,5,3,8]
queries = [[0,2,2],[4,2,4],[2,13,100]]
print(solve(candiesCount, queries))

输入

[7,4,5,3,8], [[0,2,2],[4,2,4],[2,13,100]]

输出

[True, False, True]

相关文章


有用资源