मान लीजिए कि हमारे पास डेली [i] ith भोजन की स्वादिष्टता है, तो हमें इस सूची से विभिन्न अच्छे भोजन की संख्या का पता लगाना होगा। यदि उत्तर बहुत बड़ा है, तो परिणाम मॉड्यूल 10^9 + 7 लौटाएं। यहां एक अच्छे भोजन का अर्थ है एक ऐसा भोजन जिसमें स्वादिष्टता के योग के साथ बिल्कुल दो अलग-अलग खाद्य पदार्थ होते हैं जो दो की शक्ति है। एक अच्छा भोजन बनाने के लिए हम दो अलग-अलग खाद्य पदार्थों का चयन कर सकते हैं।
इसलिए, यदि इनपुट डेली =[1,7,3,6,5] जैसा है, तो आउटपुट 3 होगा क्योंकि हम जोड़े (1,3), (1,7) और (3,5) बना सकते हैं जिनकी योग 2 की शक्ति है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- म :=10^9 + 7
- गिनती :=प्रत्येक स्वादिष्टता मूल्यों की आवृत्ति वाला नक्शा
- उत्तर:=0
- प्रत्येक आइटम के लिए मैं गिनती में, करता हूँ
- 0 से 21 की सीमा में n के लिए, करें
- j:=(2^n) - i
- अगर j गिनती में है, तो
- यदि i, j के समान है, तो
- उत्तर:=उत्तर + गिनती[i] *(गिनती[i]-1)
- अन्यथा,
- उत्तर:=उत्तर + गिनती[i] * गिनती[j]
- यदि i, j के समान है, तो
- 0 से 21 की सीमा में n के लिए, करें
- (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