मान लीजिए अमल और बिमल एक गेम खेल रहे हैं। उनके पास n कंटेनर हैं जिनमें एक या अधिक चॉकलेट हैं। ये कंटेनर 1 से N तक संख्याबद्ध हैं, जहां iवें कंटेनर में count[i] संख्या में चॉकलेट हैं। अब गेम इस तरह है। पहला खिलाड़ी एक कंटेनर चुनेगा और उससे एक या अधिक चॉकलेट लेगा। फिर दूसरा खिलाड़ी एक गैर-खाली कंटेनर चुनेगा और उससे एक या अधिक चॉकलेट लेगा, इसी तरह वे बारी-बारी से खेलते हैं। जब खिलाड़ियों में से किसी के पास चॉकलेट लेने का कोई रास्ता नहीं होता, तो वह हार जाता है। यदि अमल की बारी पहले है तो हमें पता लगाना है कि अमल कितने तरीकों से पहली चाल चल सकता है, ताकि वह हमेशा जीत सके।
तो, यदि इनपुट count = [2, 3] है, तो आउटपुट 1 होगा, क्योंकि शुरू में कंटेनर [2, 3] जैसे हैं। वे इस तरह खेल सकते हैं:
- अमल दूसरे कंटेनर से एक चॉकलेट लेता है, तो वर्तमान में [2, 2]
- बिमल पहले कंटेनर से एक चॉकलेट लेता है, तो वर्तमान में [1, 2]
- अमल दूसरे कंटेनर से एक चॉकलेट लेता है, तो वर्तमान में [1, 1]
- बिमल पहले कंटेनर से एक चॉकलेट लेता है, तो वर्तमान में [0, 1]
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- tmp := 0
- count में प्रत्येक c के लिए, करें
- tmp := tmp XOR c
- यदि tmp शून्य है, तो
- 0 लौटाएं
- अन्यथा,
- moves := 0
- count में प्रत्येक c के लिए, करें
- moves := moves + (1 जब (tmp XOR c) < c, अन्यथा 0)
- moves लौटाएं
उदाहरण
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
def solve(count): tmp = 0 for c in count: tmp ^= c if not tmp: return 0 else: moves = 0 for c in count: moves += (tmp^c) < c return moves count = [2, 3] print(solve(count))
इनपुट
[2, 3]
आउटपुट
1