मान लीजिए हमारे पास n तत्वों वाली एक सरणी A है। n छात्र समूह थे। एक समूह या तो एक व्यक्ति है जो किसी और के साथ कोड लिख सकता है, या दो लोग हैं जो एक ही टीम में कोड लिखना चाहते हैं। लेकिन मेंटर ने ठीक तीन लोगों की टीम बनाने का फैसला किया। हमें उन तीन लोगों की अधिकतम टीमों की संख्या ज्ञात करनी है जो मेंटर बना सकता है। दो के समूहों के लिए, या तो दोनों छात्रों को कोड लिखना चाहिए, या दोनों को नहीं। यदि दो के समूह के दो छात्र कोड लिखेंगे, तो वे एक ही टीम में होने चाहिए।
इसलिए, यदि इनपुट 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