# Minimum matches the team needs to win to qualify

• Last Updated : 06 May, 2021

Given two integers X and Y where X denotes the number of points required to qualify and Y denotes the number of matches left. The team receives 2 points on winning the match and 1 point on losing. The task is to find the minimum number of matches the team needs to win in order to qualify for next round.
Examples:

Input: X = 10, Y = 5
Output:
The team needs to win all the matches in order to get 10 points.
Input : X = 6, Y = 5
Output :
If the team wins a single match and loses the rest 4 matches, they would still qualify.

A naive approach is to check by iterating over all values from 0 to Y and find out the first value which gives us X points.
An efficient approach is to perform a binary search on the number of matches to be won to find out the minimum number of the match. Initially low = 0 and high = X, and then we check for the condition (mid * 2 + (y – mid)) ≥ x. If the condition prevails, then check if any lower value exists in the left half i.e. high = mid – 1 else check in the right half i.e. low = mid + 1
Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach``#include ``using` `namespace` `std;` `// Function to return the minimum number of``// matches to win to qualify for next round``int` `findMinimum(``int` `x, ``int` `y)``{` `    ``// Do a binary search to find``    ``int` `low = 0, high = y;``    ``while` `(low <= high) {` `        ``// Find mid element``        ``int` `mid = (low + high) >> 1;` `        ``// Check for condition``        ``// to qualify for next round``        ``if` `((mid * 2 + (y - mid)) >= x)``            ``high = mid - 1;``        ``else``            ``low = mid + 1;``    ``}``    ``return` `low;``}` `// Driver Code``int` `main()``{``    ``int` `x = 6, y = 5;``    ``cout << findMinimum(x, y);` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``import` `java.io.*;` `class` `GFG``{``    ` `// Function to return the minimum number of``// matches to win to qualify for next round``static` `int` `findMinimum(``int` `x, ``int` `y)``{` `    ``// Do a binary search to find``    ``int` `low = ``0``, high = y;``    ``while` `(low <= high)``    ``{` `        ``// Find mid element``        ``int` `mid = (low + high) >> ``1``;` `        ``// Check for condition``        ``// to qualify for next round``        ``if` `((mid * ``2` `+ (y - mid)) >= x)``            ``high = mid - ``1``;``        ``else``            ``low = mid + ``1``;``    ``}``    ``return` `low;``}` `// Driver Code``public` `static` `void` `main (String[] args)``{``    ``int` `x = ``6``, y = ``5``;``    ``System.out.println(findMinimum(x, y));``}``}` `// This code is contributed by ajit.`

## Python 3

 `# Python 3 implementation of the approach` `# Function to return the minimum number of``# matches to win to qualify for next round``def` `findMinimum(x, y):``    ` `    ``# Do a binary search to find``    ``low ``=` `0``    ``high ``=` `y``    ``while` `(low <``=` `high):``        ` `        ``# Find mid element``        ``mid ``=` `(low ``+` `high) >> ``1` `        ``# Check for condition``        ``# to qualify for next round``        ``if` `((mid ``*` `2` `+` `(y ``-` `mid)) >``=` `x):``            ``high ``=` `mid ``-` `1``        ``else``:``            ``low ``=` `mid ``+` `1``    ``return` `low` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ``x ``=` `6``    ``y ``=` `5``    ``print``(findMinimum(x, y))``    ` `# This code is contributed by``# Surendra_Gangwar`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG``{``        ` `// Function to return the minimum number of``// matches to win to qualify for next round``static` `int` `findMinimum(``int` `x, ``int` `y)``{` `    ``// Do a binary search to find``    ``int` `low = 0, high = y;``    ``while` `(low <= high)``    ``{` `        ``// Find mid element``        ``int` `mid = (low + high) >> 1;` `        ``// Check for condition``        ``// to qualify for next round``        ``if` `((mid * 2 + (y - mid)) >= x)``            ``high = mid - 1;``        ``else``            ``low = mid + 1;``    ``}``    ``return` `low;``}` `// Driver code``static` `public` `void` `Main()``{``    ``int` `x = 6, y = 5;``    ``Console.WriteLine(findMinimum(x, y));``}``}` `// This Code is contributed by ajit.`

## PHP

 `> 1;` `        ``// Check for condition\$``        ``// to qualify for next round``        ``if` `((``\$mid` `* 2 + (``\$y` `- ``\$mid``)) >= ``\$x``)``            ``\$high` `= ``\$mid` `- 1;``        ``else``            ``\$low` `= ``\$mid` `+ 1;``    ``}``    ``return` `\$low``;``}` `// Driver Code``\$x` `= 6; ``\$y` `= 5;``echo` `findMinimum(``\$x``, ``\$y``);` `// This code has been contributed``// by 29AjayKumar``?>`

## Javascript

 ``
Output:
`1`

Time Complexity: O(log y)

My Personal Notes arrow_drop_up