मान लीजिए हमें एक सूची दी गई है जिसमें प्राकृत संख्याएँ हैं। अब उस सूची से, हम उन सभी संख्याओं को हटा देते हैं जिनमें इसके द्विआधारी प्रतिनिधित्व में लगातार दो 1s होते हैं और Z नामक एक और सूची उत्पन्न करते हैं। अब हमें एक और सूची 'input_list' दी जाती है जिसमें कुछ पूर्णांक मान होते हैं। हमें Z से निर्दिष्ट तत्वों के XOR मान का पता लगाना है जिनकी अनुक्रमणिका input_list में निर्दिष्ट है।
इसलिए, अगर इनपुट इनपुट_लिस्ट =[3, 4, 5] जैसा है, तो आउटपुट 9 होगा।
Z के अनुक्रमित 3, 4 और 5 में; मान 4, 5 और 8 हैं। तो, 4 XOR 5 XOR 8 =9.
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक फ़ंक्शन को परिभाषित करें zeck_num() । इसमें k, f_list
- . लगेगा
- res :=0
- मैं श्रेणी में (f_list -1 का आकार) से -1 तक, 1 से घटाएं
- अगर k>=f_list[i], तो
- res :=res + 2^i
- k :=k - f_list[i]
- अगर k>=f_list[i], तो
- रिटर्न रेस
- रक्षा मंत्रालय:=10^9 + 7
- max_val :=10^18
- f_list :=1 और 2 मान वाली एक नई सूची
- f_list का अंतिम तत्व <=max_val, करते समय
- f_list का अंतिम तत्व + f_list के अंत में f_list का दूसरा अंतिम तत्व डालें
- res :=0
- इनपुट_सूची में प्रत्येक अनुक्रमणिका के लिए, करें
- res :=res XOR zeck_num(index, f_list)
- रिटर्न रेस मॉड एमओडी
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def zeck_num(k, f_list): res = 0 for i in range(len(f_list)-1,-1,-1): if k >= f_list[i]: res += 2**i k -= f_list[i] return res def solve(input_list): MOD = 10**9+7 max_val = 10**18 f_list = [1,2] while f_list[-1] <= max_val: f_list.append(f_list[-1] + f_list[-2]) res = 0 for index in input_list: res ^= zeck_num(index, f_list) return res % MOD print(solve([3, 4, 5]))
इनपुट
[3, 4, 5]
आउटपुट
9