ধরুন আমাদের কাছে সংখ্যা নামক একটি তালিকা আছে যার দৈর্ঘ্য n। এই তালিকায় উপস্থিত উপাদানগুলি একটি প্রতিযোগিতায় সাঁতারুদের বর্তমান স্কোরের প্রতিনিধিত্ব করছে। ফাইনাল ম্যাচের জন্য এই বর্তমান রাউন্ডের প্রথম স্থান বিজয়ী পাবে n স্কোর, দ্বিতীয় স্থান বিজয়ী পাবে n-1 পয়েন্ট ইত্যাদি। বর্তমান রাউন্ডের পরেও চূড়ান্ত রাউন্ডে প্রতিযোগিতা জিততে পারে এমন সাঁতারুদের সংখ্যা আমাদের পরীক্ষা করতে হবে। যদি পয়েন্টে প্রথমের জন্য একটি টাই হয়, তাহলে সেটিকেও জয় হিসেবে গণ্য করা হবে।
সুতরাং, যদি ইনপুটটি সংখ্যার মত হয় =[9, 6, 11, 12], তাহলে আউটপুট হবে 3, যেহেতু বর্তমানে যে সাঁতারুরা 9, 11 এবং 12 স্কোরে রয়েছে, তারা সবাই জিততে পারে যদি চূড়ান্ত স্কোর হয় [13] , 9, 13, 13]। অর্থাৎ, 9 স্কোর সহ সাঁতারু প্রথম স্থান পেয়েছে তাই 4 পয়েন্ট অতিরিক্ত পেয়েছে, তারপর 6 পয়েন্ট সাঁতারু দ্বিতীয় স্থান পেয়েছে তাই এখন স্কোর 9। 11 পয়েন্ট সাঁতারু তৃতীয় হয়েছে তাই নতুন স্কোর 13, এবং 12 পয়েন্ট সাঁতারু পেয়েছে শেষ স্থানে তাই স্কোরও ১২। তবে 6 পয়েন্ট সাঁতারু প্রথম স্থান অর্জন করলেও তার চূড়ান্ত স্কোর হবে 10 পয়েন্ট, 9 পয়েন্ট সাঁতারু দ্বিতীয় হবে তারপর তার স্কোর হবে 12 ইত্যাদি, তারপরও দ্বিতীয় সাঁতারুর জেতার কোন সুযোগ নেই।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- সংখ্যা খালি হলে, তারপর
- রিটার্ন 0
- n :=সংখ্যার আকার
- উত্তর :=0
- তালিকা সংখ্যা সাজান
- a :=0
- n - 1 থেকে 0 রেঞ্জের i এর জন্য, 1 কমিয়ে
- করুন
- cand :=nums[i] + n - i
- যদি cand> a, তারপর
- a :=cand
- সংখ্যায় প্রতিটি x এর জন্য, করুন
- যদি x + n>=a হয়, তাহলে
- উত্তর :=উত্তর + ১
- যদি 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