मान लीजिए कि हमारे पास एक सरणी संख्या है और दो मान l और r हैं, हमें अच्छे जोड़े की संख्या ज्ञात करनी है। यहाँ एक अच्छी जोड़ी एक जोड़ी है (i, j) जहाँ 0 <=i
इसलिए, यदि इनपुट अंकों की तरह है =[4,1,7,2] l =2 r =6, तो आउटपुट 6 होगा क्योंकि अच्छे जोड़े हैं (10):1 एक्सओआर 4 =5, (1) ,2):1 एक्सओआर 7 =6, (1,3):1 एक्सओआर 2 =3, (0,3):4 एक्सओआर 2 =6, (0,2):4 एक्सओआर 7 =3, (2,3 ):7 एक्सओआर 2 =5.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
फ़ंक्शन टेस्ट() को परिभाषित करें। इसमें अंक लगेंगे, x
-
गिनती :=एक नक्शा जिसमें अंकों में तत्वों की आवृत्ति होती है
-
रेस :=0
-
जबकि x शून्य नहीं है, करें
-
अगर x विषम है, तो
-
रेस:=रेस + के सभी तत्वों का योग (गिनती [ए] * गिनती [(एक्स - 1) एक्सओआर ए) सभी के लिए गिनती में
-
-
गिनती :=कुंजी a/2 और मान के साथ नक्शा (गिनती [a] + गिनती [a XOR 1] सभी के लिए गिनती में
-
x =x/2 का भागफल
-
-
रेस / 2 का रिटर्न भागफल
-
मुख्य विधि से वापसी परीक्षण(अंक, आर + 1) - परीक्षण(अंक, एल)
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें
from collections import Counter def solve(nums, l, r): def test(nums, x): count = Counter(nums) res = 0 while x: if x & 1: res += sum(count[a] * count[(x - 1) ^ a] for a in count) count = Counter({a >> 1: count[a] + count[a ^ 1] for a in count}) x >>= 1 return res // 2 return test(nums, r + 1) - test(nums, l) nums = [4,1,7,2] l = 2 r = 6 print(solve(nums, l, r))
इनपुट
[4,1,7,2], 2, 6
आउटपुट
6