# Maximum number of groups of size 3 containing two type of items

Given n instance of item A and m instance of item B. Find the maximum number of groups of size 3 that can be formed using these items such that all groups contain items of both types, i.e., a group should not have either all items of type A or all items of type B.

Total number of items of type A in the formed groups must be less than or equal to n.
Total number of items of type B in the formed groups must be less than or equal to m.

Examples :

Input : n = 2 and m = 6.
Output : 2
In group 1, one item of type A and two items of
type B. Similarly, in the group 2, one item of
type A and two items of type B.
We have used 2 (<= n) items of type A and 4 (<= m)
items of type B.

Input : n = 4 and m = 5.
Output : 3
In group 1, one item of type A and two items of type B.
In group 2, one item of type B and two items of type A.
In group 3, one item of type A and two items of type B.
We have used 4 (<= n) items of type A and 5 (<= 5)
items of type B.

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

Observation:
1. There will be n groups possible if m >= 2n. Or there will be m groups possible, if n >= 2m.
2. Suppose n = 3 and m = 3, so one instance of item A will make a group with the two instance of item B and one instance of item B will make a group with the two instance of item A. So, maximum two groups are possible. So find the total number of such conditions with given n and m by dividing m and m by 3. After this, there can be 0, 1, 2 instances of each type can be left. For finding the number of groups for the left instances:
a) If n = 0 or m = 0, 0 group is possible.
b) If n + m >= 3, only 1 group is possible.

Algorithm for solving this problem:
1. If n >= 2m, maximum number of groups = n.
2. Else if m >= 2n, maximum number of groups = m.
3. Else If (m + n) % 3 == 0, maximum number of group = (m + n)/3;
4. Else maximum number of group = (n + m)/3. And set n = n%3 and m = m%3.
a) If n != 0 && m != 0 && (n + m) >= 3, add one to maximum number of groups.

Below is implementation of the above idea :

## C++

 // C++ program to calculate  // maximum number of groups #include    using namespace std;    // Implements above mentioned steps. int maxGroup(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 ans = (m + n)/3;     m %= 3;     n %= 3;        if (m && n && (m + n) >= 3)         ans++;        return ans; }    // Driver code int main() {     int n = 4, m = 5;     cout << maxGroup(n, m) << endl;     return 0; }

## Java

 // Java program to calculate  // maximum number of groups import java.io.*;    public class GFG{        // Implements above mentioned steps. static int maxGroup(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 ans = (m + n) / 3;     m %= 3;     n %= 3;        if (m > 0 && n > 0 && (m + n) >= 3)         ans++;        return ans; }        // Driver code     static public void main (String[] args)     {             int n = 4, m = 5;     System.out.println(maxGroup(n, m));     } }    // This code is contributed by vt_m.

## Python3

 # Python3 program to calculate maximum  # number of groups    # Implements above mentioned steps def maxGroup(n, m):            if n >= 2 * m:         return n     if m >= 2 * n:         return m     if (m + n) % 3 == 0:         return (m + n) // 3     ans = (m + n) // 3     m = m % 3     n = n % 3            if m and n and (m + n) >= 3:         ans += 1     return ans         # Driver Code n, m = 4, 5 print(maxGroup(n, m))    # This code is contributed # by Mohit kumar 29

## C#

 // C# program to calculate  // maximum number of groups using System;    public class GFG{        // Implements above mentioned steps. static int maxGroup(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 ans = (m + n) / 3;     m %= 3;     n %= 3;        if (m > 0 && n > 0 && (m + n) >= 3)         ans++;        return ans; }        // Driver code     static public void Main ()     {         int n = 4, m = 5;         Console.WriteLine(maxGroup(n, m));     } }    // This code is contributed by vt_m.

## PHP

 = 2 * \$m)         return n;     if (\$m >= 2 * \$n)         return m;     if (((\$m + \$n) % 3) == 0)         return (\$m + \$n) / 3;        \$ans = (\$m + \$n) / 3;     \$m %= 3;     \$n %= 3;        if (\$m && \$n && (\$m + \$n) >= 3)         \$ans++;        return \$ans; }    // Driver code \$n = 4; \$m = 5; echo maxGroup(\$n, \$m) ;    // This code is contributed  // by nitin mittal.  ?>

Output :

3

This article is contributed by Anuj Chauhan(anuj0503). If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

My Personal Notes arrow_drop_up

Article Tags :
Practice Tags :

Be the First to upvote.

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.