समस्या
हर चाल में एक ढेर से दो सिक्के और दूसरे ढेर से एक सिक्का हटाए जाते हैं। दोनों ओर से ऐसा करना मान्य है। आप कभी भी किसी ढेर से उपलब्ध सिक्कों से अधिक नहीं हटा सकते। निर्धारित करें कि क्या दोनों ढेरें शून्य पर समाप्त की जा सकती हैं।
coin_piles(left, right) को लागू करें।
इनपुट
left: बाएं ढेर में सिक्कों की संख्या।
right: दाएं ढेर में सिक्कों की संख्या।
आउटपुट
यदि दोनों ढेरें खाली की जा सकती हैं तो true लौटाएँ; अन्यथा false लौटाएँ।
सीमाएँ
0 ≤ left, right ≤ 1,000,000,000। दो खाली ढेरें पहले से ही सफल परिणाम मानी जाएंगी।
उदाहरण
इनपुट:
left = 4
right = 2
अपेक्षित आउटपुट:
expected = True
इनपुट:
long long left = 4;
long long right = 2;
अपेक्षित आउटपुट:
bool expected = true;
इनपुट:
long left = 4;
long right = 2;
अपेक्षित आउटपुट:
bool expected = true;
व्याख्या
(2, 1) को दो बार हटाएँ: (4, 2) → (2, 1) → (0, 0)।
इनपुट:
left = 4
right = 1
अपेक्षित आउटपुट:
expected = False
इनपुट:
long long left = 4;
long long right = 1;
अपेक्षित आउटपुट:
bool expected = false;
इनपुट:
long left = 4;
long right = 1;
अपेक्षित आउटपुट:
bool expected = false;
व्याख्या
केवल संभव पहली चाल (2, 0) छोड़ती है, जिसके बाद बाएं ढेर को खाली करने के लिए कोई चाल नहीं बचती।
कैसे हल करें
पहले खुद कोशिश करें, फिर एक-एक करके संकेत खोलें।
संकेत 1
हर move में कुल exactly तीन coins हटते हैं, इसलिए total coin count उसी pattern में होना चाहिए.
संकेत 2
किसी भी pile को zero से नीचे नहीं ले जा सकते, इसलिए एक pile दूसरे की support से ज़्यादा नहीं हो सकता.
संकेत 3
दोनों total amount और piles के बीच का difference check करो.
अपेक्षित जटिलता
समय O(1), अतिरिक्त स्थान O(1)
संदर्भ
यह चुनौती CodeUtility के लिए अनुकूलित की गई है। ऊपर दिए गए स्टेटमेंट और सीमाओं का पालन करें।