ধরুন আমাদের n উপাদান সহ একটি অ্যারে A আছে। ছাত্রদের একটি দল ছিল। একটি গ্রুপ হয় একজন ব্যক্তি যিনি অন্য কারো সাথে কোড লিখতে পারেন, অথবা দুই ব্যক্তি যারা একই দলে কোড লিখতে চান। কিন্তু পরামর্শদাতা ঠিক তিন জনের দল গঠনের সিদ্ধান্ত নেন। পরামর্শদাতা তৈরি করতে পারেন এমন তিনজনের সর্বোচ্চ সংখ্যক দল আমাদের খুঁজে বের করতে হবে। দুই দলের জন্য, হয় উভয় ছাত্রেরই কোড লিখতে হবে, অথবা উভয়ের উচিত নয়। যদি দু'জনের একটি গ্রুপ থেকে দুজন ছাত্র কোড লিখতে পারে, তবে তাদের একই দলে থাকা উচিত।
সুতরাং, যদি ইনপুটটি A =[2, 2, 2, 1, 1, 1, 1] এর মতো হয়, তবে আউটপুট হবে 3, কারণ পরামর্শদাতা দলগুলি তৈরি করতে পারেন যেমন:[দুইজনের প্রথম দল এবং সপ্তম গ্রুপ একজন ব্যক্তির], [দুই জনের দ্বিতীয় দল এবং এক ব্যক্তির ষষ্ঠ দল], [দুইজনের তৃতীয় দল এবং এক ব্যক্তির চতুর্থ দল]।
পদক্ষেপ
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
p := 0 q := 0 x := size of A for initialize i := 0, when i < x, update (increase i by 1), do: a := A[i] if a is same as 1, then: p := p + 1 Otherwise q := q + 1 if p > q, then: return q + (p - q) otherwise when p < q, then: return p Otherwise return p
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
#include <bits/stdc++.h> using namespace std; int solve(vector<int> A){ int p = 0, q = 0; int x = A.size(); for (int i = 0; i < x; i++){ int a = A[i]; if (a == 1){ p = p + 1; } else{ q = q + 1; } } if (p > q){ return q + (p - q) / 3; } else if (p < q){ return p; } else{ return p; } } int main(){ vector<int> A = { 2, 2, 2, 1, 1, 1, 1 }; cout << solve(A) << endl; }
ইনপুট
{ 2, 2, 2, 1, 1, 1, 1 }
আউটপুট
3