在Python中编写计算恰好具有两个项目的好餐点计数程序

在Python中编写计算恰好具有两个项目的好餐点计数程序

假设我们有一个数组deli,其中deli [i]是第i个食品的美味程度,我们必须从此列表中找到可以制作的不同好餐点的数量。 如果答案太大,则返回结果取模10 ^ 9 + 7。 这里的好餐点指正是包含恰好两种不同食品项目的餐点,其美味度之和是2的n次幂。 我们可以选择任何两种不同的食品制作好的餐点。

因此,如果输入为deli = [1,7,3,6,5],则输出为3,因为我们可以制作和为2的n次幂的三对(1,3),(1,7)和(3,5)。

要解决此问题,我们将遵循以下步骤 –

  • $m = 10 ^ 9 + 7$
  • $count$:包含每个美味程度值出现频率的映射
  • $ans = 0$
  • 对于count中的每个元素i,执行以下操作:
    • for n in range 0 to 21,执行以下操作:
      • j:=(2^n) – i
      • 如果j计数中,则
      • 如果ij相同,则
        • $ans = ans + count[i] \cdot (count[i]-1)$
      • 否则,
        • $ans = ans + count[i] \cdot count[j]$
  • 返回(ans ÷ 2)mod m

示例

让我们看以下实现,以获得更好的理解 –

from collections import Counter
def solve(deli):
   m = 10 ** 9 + 7
   count = Counter(deli)
   ans = 0
   for i in count:
      for n in range(22):
         j = (1 << n) - i
         if j in count:
            if i == j:
               ans += count[i] * (count[i]-1)
            else:
               ans += count[i] * count[j]
   return (ans // 2) % m

deli = [1,7,3,6,5]
print(solve(deli))

输入

[1,7,3,6,5]

输出

3

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程