मान लीजिए कि हमारे पास संख्याओं की एक सूची है, जिन्हें अंक कहा जाता है, जिनकी लंबाई n है। इस सूची में मौजूद तत्व एक प्रतियोगिता में तैराकों के वर्तमान स्कोर का प्रतिनिधित्व कर रहे हैं। फाइनल मैच के लिए इस मौजूदा दौर के पहले स्थान के विजेता को n अंक मिलेंगे, दूसरे स्थान के विजेता को n-1 अंक मिलेंगे और इसी तरह। हमें उन तैराकों की संख्या की जांच करनी होगी जो मौजूदा दौर के बाद भी अंतिम दौर में प्रतियोगिता जीत सकते हैं। अगर पहले अंक के लिए कोई टाई है, तो उसे भी जीत के रूप में गिना जाएगा।
इसलिए, यदि इनपुट अंकों की तरह है =[9, 6, 11, 12], तो आउटपुट 3 होगा, क्योंकि तैराक जो वर्तमान में स्कोर 9, 11 और 12 पर हैं, वे सभी जीत सकते हैं यदि अंतिम स्कोर [13] है , 9, 13, 13]। यानी, 9 अंक वाले तैराक ने पहला स्थान प्राप्त किया इसलिए 4 अंक अतिरिक्त मिले, फिर 6 अंक वाले तैराक को दूसरा स्थान मिला, इसलिए अब स्कोर 9 है। 11 अंक वाले तैराक को तीसरा स्थान मिलता है इसलिए नया स्कोर 13 है, और 12 अंक के तैराक को मिला है। अंतिम स्थान तो स्कोर भी 12 है। लेकिन अगर 6 अंक तैराक प्रथम स्थान प्राप्त करता है तो उसका अंतिम स्कोर 10 अंक होगा, 9 अंक तैराक को दूसरा मिलेगा, उसका स्कोर 12 होगा और इसी तरह, फिर भी दूसरे तैराक के लिए जीतने का कोई मौका नहीं है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- यदि अंक खाली हैं, तो
- वापसी 0
- n :=अंकों का आकार
- उत्तर:=0
- सूची संख्या क्रमित करें
- a :=0
- मैं के लिए n - 1 से 0 की श्रेणी में, 1 से घटाएं
- कैंड:=nums[i] + n - i
- अगर कैंड> ए, तो
- a :=cand
- अंकों में प्रत्येक x के लिए, करें
- यदि x + n>=a, तो
- उत्तर:=उत्तर + 1
- यदि x + n>=a, तो
- वापसी उत्तर
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(nums): if not nums: return 0 n = len(nums) ans = 0 nums.sort() a = 0 for i in range(n - 1, -1, -1): cand = nums[i] + n - i if cand > a: a = cand for x in nums: if x + n >= a: ans += 1 return ans nums = [9, 6, 11, 12] print(solve(nums))
इनपुट
[9, 6, 11, 12]
आउटपुट
3