Maximum number of groups of size 3 containing two type of items in C++


Given the task is to calculate the maximum number of groups of size 3 that can be formed when N number of items of type A and M number of items of type B are given.

Also, each group should have at least one item of each type, that is either A or B.

Let’s now understand what we have to do using an example −

Input − N=3, M=5

Input − 2

Explanation

Group 1: 1 item of type A and 2 items of type B
Group 2: 1 item of type A and 2 items of type B
In total, 2 items of type A and 4 items of type B are used.

Input − N=5, M=9

Input − 4

Approach used in the below program as follows

  • The following situation can be divided into 4 cases −

    • Case 1

      When M>=2N, then maximum number of groups possible = M

    • Case 2

      When N>=2M, then maximum number of groups possible = N

    • Case 3

      When (M+N) % 3 == 0, then maximum number of groups possible = (M+N)/3

    • Case 4

      When none of the above conditions are true then the maximum number of cases become (M+N)/3 + (Any remaining group).

      To check if there is any group remaining, set N=N%3 and M=M%3 to obtain the remaining items of both types and then check using the following condition −

      If ( N!=0 && M!=0 && (N+M)>=3)

      If the above condition is true, then add 1 to the final result.

  • In function MaxGrp(), using if condition check for the above cases

  • If( M>=2*N ) is true then return M as the answer. Else If( N>=2*M ) is true then return N as the answer.

  • If both of the above conditions are not true, then check if( (M + N)%3 == 0 ). If it is true then return (M + N)/3 as the answer.

  • If none of the above condition is true then initialize a variable count = (M + N)/3 of type int.

    Put N=N%3 and M=M%3 and check for any remaining group using the above stated condition in Case 4. If the condition is true then add 1 to count and return the answer.

Example

 Live Demo

#include<bits/stdc++.h>
using namespace std;
// Implements above mentioned steps.
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;
}

Output

If we run the above code we will get the following output −

4

Updated on: 17-Aug-2020

115 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements