मान लीजिए हमारे पास तीन मान a, b और c हैं। हम एक सॉलिटेयर गेम खेल रहे हैं जिसमें पत्थरों के तीन ढेर हैं जिनका आकार क्रमशः a, b और c है। प्रत्येक मोड़ पर खिलाड़ी दो अलग-अलग गैर-खाली ढेरों का चयन करता है, प्रत्येक से एक पत्थर लेता है, और अपने स्कोर में 1 अंक जोड़ता है। खेल समाप्त होता है जब दो से कम गैर-रिक्त ढेर होते हैं। इसलिए हमें आपके द्वारा प्राप्त किए जा सकने वाले अधिकतम अंक प्राप्त करने होंगे।
इसलिए, यदि इनपुट a =4, b =4, c =6 जैसा है, तो आउटपुट 7 होगा क्योंकि प्रारंभिक अवस्था (4, 4, 6) है, तो हम इन चरणों का पालन कर सकते हैं -
-
पहले और दूसरे ढेर में से चुनें ताकि वर्तमान स्थिति (3, 3, 6) हो
-
पहली और तीसरी बवासीर में से चुनें ताकि वर्तमान स्थिति (2, 3, 5) हो
-
पहली और तीसरी बवासीर में से चुनें ताकि वर्तमान स्थिति (1, 3, 4) हो
-
पहले और तीसरे ढेर में से चुनें ताकि वर्तमान स्थिति (0, 3, 3)
. हो -
2 और 3 बवासीर में से चुनें ताकि वर्तमान स्थिति (0, 2, 2)
. हो -
2 और 3 बवासीर में से चुनें ताकि वर्तमान स्थिति (0, 1, 1)
. हो -
2 और 3 बवासीर में से चुनें ताकि वर्तमान स्थिति (0, 0, 0) हो
और अंत में दो से कम खाली ढेर हैं, इसलिए खेल समाप्त होता है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
-
न्यूनतम:=न्यूनतम a, b और c
-
अधिकतम :=अधिकतम a, b और c
-
बायां :=a + b + c - अधिकतम - न्यूनतम
-
यदि अधिकतम-बाएं <=न्यूनतम, तो
-
वापसी न्यूनतम + बायां - भागफल (1 + न्यूनतम - (अधिकतम-बाएं))/2
-
-
कम से कम + (न्यूनतम (अधिकतम-न्यूनतम) और बाएं)
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(a, b, c): minimum = min(a,b,c) maximum = max(a,b,c) left = a+b+c-maximum-minimum if maximum-left<=minimum: return minimum + left-(1+minimum-(maximum-left))//2 return minimum + min(maximum-minimum,left) a = 4 b = 4 c = 6 print(solve(a, b, c))
इनपुट
4, 4, 6
आउटपुट
7