Python程式:計算恰好包含兩項的優質餐食數量
假設我們有一個數組deli,其中deli[i]是第i種食物的美味程度,我們需要找到可以從這個列表中製作的不同優質餐食的數量。如果答案過大,則返回結果模10^9 + 7。這裡,優質餐食是指恰好包含兩種不同食物,且美味程度之和為2的冪的餐食。我們可以選擇任意兩種不同的食物來製作優質餐食。
因此,如果輸入類似於deli = [1,7,3,6,5],則輸出將為3,因為我們可以製作對(1,3),(1,7)和(3,5),它們的和是2的冪。
為了解決這個問題,我們將遵循以下步驟:
- m := 10^9 + 7
- count := 一個包含每個美味程度值頻率的對映
- ans := 0
- 對於count中的每個專案i,執行:
- 對於n從0到21,執行:
- j:= (2^n) - i
- 如果j在count中,則:
- 如果i等於j,則:
- ans := ans + count[i] *(count[i]-1)
- 否則:
- ans := ans + count[i] * count[j]
- 如果i等於j,則:
- 對於n從0到21,執行:
- 返回(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
廣告