दिया गया कार्य आकार 3 के अधिकतम समूहों की संख्या की गणना करना है जो तब बनाए जा सकते हैं जब N संख्या में टाइप A की वस्तुएं और M संख्या में टाइप B की वस्तुएं दी गई हों।
साथ ही, प्रत्येक समूह में प्रत्येक प्रकार की कम से कम एक वस्तु होनी चाहिए, यानी या तो A या B।
उदाहरण से समझते हैं
इनपुट - N=3, M=5
आउटपुट - 2
व्याख्या
समूह 1: टाइप A की 1 वस्तु और टाइप B की 2 वस्तुएं समूह 2: टाइप A की 1 वस्तु और टाइप B की 2 वस्तुएं कुल मिलाकर, टाइप A की 2 वस्तुएं और टाइप B की 4 वस्तुएं उपयोग हुईं।
इनपुट - N=5, M=9
आउटपुट - 4
प्रयुक्त दृष्टिकोण
निम्नलिखित स्थिति को 4 केस में विभाजित किया जा सकता है:
केस 1 - जब M >= 2N, तब अधिकतम संभव समूह = M
केस 2 - जब N >= 2M, तब अधिकतम संभव समूह = N
केस 3 - जब (M+N) % 3 == 0, तब अधिकतम संभव समूह = (M+N)/3
केस 4 - जब उपरोक्त में से कोई भी शर्त सत्य नहीं है तब अधिकतम केस (M+N)/3 + (कोई शेष समूह) बन जाते हैं।
यह जांचने के लिए कि क्या कोई समूह शेष है, N=N%3 और M=M%3 सेट करके दोनों प्रकार की शेष वस्तुएं प्राप्त करें और फिर निम्न शर्त का उपयोग करके चेक करें:
If ( N!=0 && M!=0 && (N+M)>=3 )
यदि उपरोक्त शर्त सत्य है, तो अंतिम परिणाम में 1 जोड़ें।
MaxGrp() फंक्शन में, उपरोक्त केस के लिए if कंडीशन का उपयोग करके चेक करें।
यदि (M >= 2*N) सत्य है तो M को उत्तर के रूप में वापस करें। अन्यथा यदि (N >= 2*M) सत्य है तो N को उत्तर के रूप में वापस करें।
यदि उपरोक्त दोनों शर्तें सत्य नहीं हैं, तो चेक करें यदि ((M + N)%3 == 0)। यदि यह सत्य है तो (M + N)/3 को उत्तर के रूप में वापस करें।
यदि उपरोक्त में से कोई भी शर्त सत्य नहीं है तो count = (M + N)/3 टाइप का एक वेरिएबल आरंभ करें। N=N%3 और M=M%3 रखें और केस 4 में बताई गई शर्त का उपयोग करके किसी शेष समूह के लिए चेक करें। यदि शर्त सत्य है तो count में 1 जोड़ें और उत्तर वापस करें।
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