ধরুন, কলেজ বাসের মাধ্যমে তাদের কলেজ থেকে তাদের বাড়িতে ফেরার জন্য এন সংখ্যক ছাত্র দল অপেক্ষা করছে। প্রতিটি ছাত্র দলে এম সংখ্যক ছাত্র রয়েছে। ছাত্রদলগুলো আলাদা না হয়ে বাসে যাতায়াত করতে চায়। তারা বাসে ওঠে যদি এবং শুধুমাত্র যদি তাদের গ্রুপের সকল সদস্য বাসে উঠতে পারে। এছাড়াও, একটি গোষ্ঠী বাসে চড়বে না যদি তাদের পূর্ববর্তী দল বাসে না ওঠে বা ইতিমধ্যে তাদের গন্তব্যে পৌঁছে যায়। যদি আমাদের প্রতিটি গ্রুপে গ্রুপের সংখ্যা এবং শিক্ষার্থীর সংখ্যা দেওয়া হয়, তাহলে আমাদের বাসের আকার খুঁজে বের করতে হবে যাতে বাসটি সমস্ত গ্রুপকে পরিবহন করতে পারে, এবং প্রতিবার কলেজ থেকে বাস শুরু করার সময় কোনও খালি জায়গা থাকে না। বাসে।
সুতরাং, ইনপুট যদি গ্রুপের মত হয় বা gr_no =[3, 4, 2, 2, 1, 4, 3, 5], তাহলে আউটপুট হবে [12, 24]।
বাসের আকার 12 হলে, এতে প্রথম ট্রিপে 1 - 5 গ্রুপ এবং দ্বিতীয় ট্রিপে বাকি গ্রুপ থাকতে পারে।
বাসের আকার 24 হলে, এতে সমস্ত গ্রুপ থাকতে পারে এবং শুধুমাত্র একটি ট্রিপে তাদের পরিবহন করা যেতে পারে।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন factor_ret() সংজ্ঞায়িত করুন। এটি n
- লাগবে
- রেঞ্জে i এর জন্য (0 থেকে n^ 0.5), করুন
- যদি n mod i 0 এর মত হয়, তাহলে
- আউটপুট_লিস্টে একটি টিপল(i, ফ্লোর মান (n/i)) যোগ করুন
- যদি n mod i 0 এর মত হয়, তাহলে
- লিস্ট আউটপুট_লিস্ট সাজান
- আউটপুট_তালিকা একটি সেট হিসাবে ফেরত দিন
- রেঞ্জে i এর জন্য (0 থেকে n^ 0.5), করুন
- এখন নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন -
- মোট :=একটি নতুন তালিকা যেখানে আইটেম gr_no[0][0]
- আমি রেঞ্জ 1 থেকে gr_no আকারের জন্য, কর
- মোট শেষে যোগ করুন[i - 1] + gr_no[i]
- b_sizes :=একটি নতুন তালিকা
- factor_ret (তালিকার যোগফল (gr_no)) এ প্রতিটি আকারের জন্য, করুন
- temp_list :=মোট থেকে সমস্ত অ-শূন্য উপাদান থেকে একটি নতুন তালিকা
- সূচক :=1
- সূচক :=সত্য
- temp_list এর প্রতিটি পয়েন্টের জন্য, করুন
- বিন্দু যদি আকার * সূচকের মতো না হয়, তাহলে
- সূচক :=মিথ্যা
- লুপ থেকে বেরিয়ে আসুন
- সূচী :=সূচক + 1
- বিন্দু যদি আকার * সূচকের মতো না হয়, তাহলে
- যদি নির্দেশক সত্য হয়, তাহলে
- b_sizes শেষে সাইজ ঢোকান
- বি_সাইজ ফেরত দিন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
functools import reducedef solve(gr_no):মোট =[gr_no[0]] এর জন্য i range(1, len(gr_no)):total.append(total[i - 1] + gr_no[i]) b_sizes =[] factor_ret(sum(gr_no)) এর আকারের জন্য:temp_list =list(filter(lambda x :x % size ==0, total)) index =1 indicator =temp_list-এ বিন্দুর জন্য সত্য:if point !=size * index:indicator =False break index +=1 যদি সূচক:b_sizes.append(size) ফেরত b_sizesdef factor_ret(n):রিটার্ন sorted(set(reduce(list.__add__, ([i, n//i]) রেঞ্জের জন্য i (1, int(n**0.5) + 1) যদি n % i ==0))))মুদ্রণ(সমাধান([3, 4, 2, 2, 1, 4, 3, 5]))
ইনপুট
<প্রে>[৩, ৪, ২, ২, ১, ৪, ৩, ৫]আউটপুট
[12, 24]