ধরুন আমাদের একটি সংখ্যা আছে n বোঝায় n মানুষ এবং দুটি অভিন্ন ভোটিং মেশিন আছে। আমাদের কাছে টাইম অফ সাইজ n নামক একটি অ্যারে রয়েছে যাতে সময়[i] যে কোনও মেশিনে ভোট দেওয়ার জন্য i-তম ব্যক্তির ব্যয় করা মোট সময়কে প্রতিনিধিত্ব করে। একবার তাত্ক্ষণিকভাবে, দুটি মেশিনের প্রতিটিতে শুধুমাত্র একজন ব্যক্তি থাকতে পারে। আমাদের আরও একটি মান x আছে, যা সর্বাধিক অনুমোদিত সময়ের প্রতিনিধিত্ব করে যার জন্য মেশিনগুলি চালু আছে, আমাদের পরীক্ষা করতে হবে যে সমস্ত ব্যক্তি তাদের ভোট দিতে পারে কি না৷
সুতরাং, যদি ইনপুটটি n =3, x =7, সময় =[3, 5, 3] এর মত হয়, তাহলে আউটপুটটি True হবে। কারণ t0 সময়ে 0 তম ব্যক্তি প্রথম মেশিনে যায় এবং 1 ম ব্যক্তি দ্বিতীয় মেশিনে যায়। এখন সময়ে T3 প্রথম মেশিন বিনামূল্যে। এখন দ্বিতীয় ব্যক্তি প্রথম মেশিনে যান এবং সময়ে t5 দ্বিতীয় মেশিন বিনামূল্যে এবং সময়ে t6 প্রথম মেশিন বিনামূল্যে তাই সমস্ত অংশগ্রহণকারীরা সময়মত ভোট দিয়েছেন।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- total_sum :=সময়ের সকল উপাদানের যোগফল
- যদি মোট_সমষ্টি <=x, তাহলে
- সত্য ফেরান
- লিস্টের সময় সাজান
- prev_sum :=সময়ের সমান আকারের একটি অ্যারে এবং 0 দিয়ে পূরণ করুন
- prev_sum[0] :=সময়[0]
- আমি রেঞ্জ 1 থেকে prev_sum এর আকারের জন্য, কর
- prev_sum[i] :=prev_sum[i - 1] + সময়[i]
- আমি রেঞ্জ 0 থেকে prev_sum এর আকারের জন্য, করুন
- j এর জন্য রেঞ্জ i + 1 থেকে prev_sum - 1 এর আকারে, do
- temp_sum :=prev_sum[i] + (total_sum - prev_sum[j])
- যদি temp_sum <=x এবং total_sum - temp_sum <=x, তারপর
- সত্য ফেরান
- j এর জন্য রেঞ্জ i + 1 থেকে prev_sum - 1 এর আকারে, do
- মিথ্যে ফেরত দিন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
def solve(n, x, time): total_sum = sum(time) if total_sum <= x: return True time.sort() prev_sum = [0 for i in range(len(time))] prev_sum[0] = time[0] for i in range(1, len(prev_sum)): prev_sum[i] = prev_sum[i - 1] + time[i] for i in range(0, len(prev_sum)): for j in range(i + 1, len(prev_sum)): temp_sum = (prev_sum[i] + (total_sum - prev_sum[j])) if temp_sum <= x and total_sum - temp_sum <= x: return True return False n = 3 x = 7 time = [3, 5, 3] print(solve(n, x, time))
ইনপুট
3, 7, [3, 5, 3]
আউটপুট
True