দেওয়া কাজ হল N সংখ্যক টাইপ A আইটেম এবং M সংখ্যক টাইপ B আইটেম দিয়ে সাইজ ৩-এর সর্বোচ্চ কতগুলো গ্রুপ বানানো যায় তা ক্যালকুলেট করা। প্রতিটি গ্রুপে দুটি টাইপের কমপক্ষে একটি আইটেম থাকতে হবে।
উদাহরণ দিয়ে বোঝা যাক
ইনপুট - N=3, M=5
আউটপুট - ২
ব্যাখ্যা
গ্রুপ ১: টাইপ A-এর ১ আইটেম এবং টাইপ B-এর ২ আইটেম গ্রুপ ২: টাইপ A-এর ১ আইটেম এবং টাইপ B-এর ২ আইটেম মোট ব্যবহার: টাইপ A-এর ২ আইটেম এবং টাইপ B-এর ৪ আইটেম
ইনপুট - N=5, M=9
আউটপুট - ৪
প্রোগ্রামে ব্যবহৃত পদ্ধতি
পরিস্থিতিটি ৪টি কেসে ভাগ করা যায় -
কেস ১ - যখন M>=2N, তবে সর্বোচ্চ গ্রুপ = M
কেস ২ - যখন N>=2M, তবে সর্বোচ্চ গ্রুপ = N
কেস ৩ - যখন (M+N) % 3 == 0, তবে সর্বোচ্চ গ্রুপ = (M+N)/3
কেস ৪ - উপরের কোনো কন্ডিশন সত্য না হলে সর্বোচ্চ গ্রুপ = (M+N)/3 + (অবশিষ্ট গ্রুপ যদি থাকে)।
অবশিষ্ট গ্রুপ আছে কিনা চেক করতে, N=N%3 এবং M=M%3 সেট করুন অবশিষ্ট আইটেম বের করার জন্য এবং নিচের কন্ডিশন চেক করুন -
If ( N!=0 && M!=0 && (N+M)>=3)
যদি উপরের কন্ডিশন সত্য হয়, তবে ফাইনাল রেজাল্টে ১ যোগ করুন।
MaxGrp() ফাংশনে if কন্ডিশন দিয়ে উপরের কেসগুলো চেক করুন।
If( M>=2*N ) সত্য হলে M ফেরত দিন। Else If( N>=2*M ) সত্য হলে N ফেরত দিন।
উপরের দুটি কন্ডিশন সত্য না হলে চেক করুন if( (M + N)%3 == 0 )। সত্য হলে (M + N)/3 ফেরত দিন।
কোনো কন্ডিশন সত্য না হলে count = (M + N)/3 আরম্ভ করুন। N=N%3 এবং M=M%3 সেট করুন এবং কেস ৪-র কন্ডিশন চেক করুন। সত্য হলে count-এ ১ যোগ করুন এবং ফেরত দিন।
C++ প্রোগ্রাম উদাহরণ
#include<bits/stdc++.h>
using namespace std;
// উপরের ধাপগুলো ইমপ্লিমেন্ট করে
int MaxGrp(int N, int M){
if (N >= 2 * M)
return N;
if (M >= 2 * N)
return M;
if ((M + N) % 3 == 0)
return (M + N)/3;
int count = (M + N)/3;
M %= 3;
N %= 3;
if (M && N && (M + N) >= 3)
count++;
return count;
}
int main(){
int N = 5, M = 9;
cout << MaxGrp(N, M);
return 0;
}
আউটপুট
4