Tuesday, November 26, 2024
Google search engine
HomeData Modelling & AIMaximum number of mangoes that can be bought

Maximum number of mangoes that can be bought

Given two integers W and C, representing the number of watermelons and coins, the task is to find the maximum number of mangoes that can be bought given that each mango costs 1 watermelon and X coins and y coins can be earned selling a watermelon.

Examples:

Input: W = 10, C = 10, X = 1, Y = 1
Output: 10
Explanation: The most optimal way is to use 10 watermelons and 10 coins to buy 10 mangoes. Hence, the maximum number of mangoes that can be bought is 10.

Input: W = 4, C = 8, X = 4, Y = 4
Output: 3
Explanation: The most optimal way is to sell one watermelon. Then, the number of coins increases by 4. Therefore, the total number of coins becomes 12. Therefore, 3 watermelons and 12 coins can be used to buy 3 mangoes. Hence, the maximum number of mangoes that can be bought is 3.

Approach: This problem can be solved using binary search. The idea is to find the maximum number of mangoes in the search space. Follow the steps below to solve the problem:

  • Initialize a variable ans as 0 to store the required result.
  • Initialize two variables l as 0, r as W to store the boundary regions of the search space for binary search.
  • Loop while l?r and perform the following steps:
    • Store the middle value in a variable mid as (l+r)/2.
    • Check if mid number of mangoes can be bought using the given value of W, C, x, and y.
    • If true, then update ans to mid and search in the right part of mid by updating l to mid+1. Otherwise, update the value of r to mid-1.
  • Print the value of ans as the result.

Below is the implementation of the above approach:

C++14




// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if mid number
// of mangoes can be bought
bool check(int n, int m, int x, int y, int vl)
{
    // Store the coins
    int temp = m;
 
    // If watermelons needed are greater
    // than given watermelons
    if (vl > n)
        return false;
 
    // Store remaining watermelons if vl
    // watermelons are used to buy mangoes
    int ex = n - vl;
 
    // Store the value of coins if these
    // watermelon get sold
    ex *= y;
 
    // Increment coins by ex
    temp += ex;
 
    // Number of mangoes that can be buyed
    // if only x coins needed for one mango
    int cr = temp / x;
 
    // If the condition is satisfied,
    // return true
    if (cr >= vl)
        return true;
 
    // Otherwise return false
    return false;
}
 
// Function to find the maximum number of mangoes
// that can be bought by selling watermelons
int maximizeMangoes(int n, int m, int x, int y)
{
    // Initialize the boundary values
    int l = 0, r = n;
 
    // Store the required result
    int ans = 0;
 
    // Binary Search
    while (l <= r) {
 
        // Store the mid value
        int mid = l + (r - l) / 2;
 
        // Check if it is possible to
        // buy mid number of mangoes
        if (check(n, m, x, y, mid)) {
            ans = mid;
            l = mid + 1;
        }
 
        // Otherwise, update r to mid -1
        else
            r = mid - 1;
    }
 
    // Return the result
    return ans;
}
 
// Driver Code
int main()
{
    // Given Input
    int W = 4, C = 8, x = 4, y = 4;
 
    // Function Call
    cout << maximizeMangoes(W, C, x, y);
 
    return 0;
}


Java




// Java program for the above approach
class GFG{
 
// Function to check if mid number
// of mangoes can be bought
static boolean check(int n, int m, int x,
                     int y, int vl)
{
     
    // Store the coins
    int temp = m;
 
    // If watermelons needed are greater
    // than given watermelons
    if (vl > n)
        return false;
 
    // Store remaining watermelons if vl
    // watermelons are used to buy mangoes
    int ex = n - vl;
 
    // Store the value of coins if these
    // watermelon get sold
    ex *= y;
 
    // Increment coins by ex
    temp += ex;
 
    // Number of mangoes that can be buyed
    // if only x coins needed for one mango
    int cr = temp / x;
 
    // If the condition is satisfied,
    // return true
    if (cr >= vl)
        return true;
 
    // Otherwise return false
    return false;
}
 
// Function to find the maximum number
// of mangoes that can be bought by
// selling watermelons
static int maximizeMangoes(int n, int m,
                           int x, int y)
{
     
    // Initialize the boundary values
    int l = 0, r = n;
 
    // Store the required result
    int ans = 0;
 
    // Binary Search
    while (l <= r)
    {
         
        // Store the mid value
        int mid = l + (r - l) / 2;
 
        // Check if it is possible to
        // buy mid number of mangoes
        if (check(n, m, x, y, mid))
        {
            ans = mid;
            l = mid + 1;
        }
 
        // Otherwise, update r to mid -1
        else
            r = mid - 1;
    }
 
    // Return the result
    return ans;
}
 
// Driver code
public static void main(String[] args)
{
     
    // Given Input
    int W = 4, C = 8, x = 4, y = 4;
 
    // Function Call
    System.out.println(maximizeMangoes(W, C, x, y));
}
}
 
// This code is contributed by abhinavjain194


Python3




# Python3 program for the above approach
 
# Function to check if mid number
# of mangoes can be bought
def check(n, m, x, y, vl):
     
    # Store the coins
    temp = m
 
    # If watermelons needed are greater
    # than given watermelons
    if (vl > n):
        return False
 
    # Store remaining watermelons if vl
    # watermelons are used to buy mangoes
    ex = n - vl
 
    # Store the value of coins if these
    # watermelon get sold
    ex *= y
 
    # Increment coins by ex
    temp += ex
 
    # Number of mangoes that can be buyed
    # if only x coins needed for one mango
    cr = temp // x
 
    # If the condition is satisfied,
    # return true
    if (cr >= vl):
        return True
 
    # Otherwise return false
    return False
 
# Function to find the maximum number of mangoes
# that can be bought by selling watermelons
def maximizeMangoes(n, m, x, y):
     
    # Initialize the boundary values
    l = 0
    r = n
 
    # Store the required result
    ans = 0
 
    # Binary Search
    while (l <= r):
 
        # Store the mid value
        mid = l + (r - l) // 2
 
        # Check if it is possible to
        # buy mid number of mangoes
        if (check(n, m, x, y, mid)):
            ans = mid
            l = mid + 1
 
        # Otherwise, update r to mid -1
        else:
            r = mid - 1
 
    # Return the result
    return ans
 
# Driver Code
if __name__ == '__main__':
     
    # Given Input
    W = 4
    C = 8
    x = 4
    y = 4
 
    # Function Call
    print(maximizeMangoes(W, C, x, y))
     
# This code is contributed by bgangwar59


C#




// C# program for the above approach
using System;
 
class GFG{
 
// Function to check if mid number
// of mangoes can be bought
static bool check(int n, int m, int x,
                  int y, int vl)
{
     
    // Store the coins
    int temp = m;
 
    // If watermelons needed are greater
    // than given watermelons
    if (vl > n)
        return false;
 
    // Store remaining watermelons if vl
    // watermelons are used to buy mangoes
    int ex = n - vl;
 
    // Store the value of coins if these
    // watermelon get sold
    ex *= y;
 
    // Increment coins by ex
    temp += ex;
 
    // Number of mangoes that can be buyed
    // if only x coins needed for one mango
    int cr = temp / x;
 
    // If the condition is satisfied,
    // return true
    if (cr >= vl)
        return true;
 
    // Otherwise return false
    return false;
}
 
// Function to find the maximum number of mangoes
// that can be bought by selling watermelons
static int maximizeMangoes(int n, int m, int x, int y)
{
     
    // Initialize the boundary values
    int l = 0, r = n;
 
    // Store the required result
    int ans = 0;
 
    // Binary Search
    while (l <= r)
    {
         
        // Store the mid value
        int mid = l + (r - l) / 2;
 
        // Check if it is possible to
        // buy mid number of mangoes
        if (check(n, m, x, y, mid))
        {
            ans = mid;
            l = mid + 1;
        }
 
        // Otherwise, update r to mid -1
        else
            r = mid - 1;
    }
 
    // Return the result
    return ans;
}
 
// Driver Code
public static void Main()
{
     
    // Given Input
    int W = 4, C = 8, x = 4, y = 4;
 
    // Function Call
    Console.Write(maximizeMangoes(W, C, x, y));
}
}
                
// This code is contributed by ukasp


Javascript




<script>
// Javascript program for the above approach
 
// Function to check if mid number
// of mangoes can be bought
function check(n, m,  x, y,vl)
{
    // Store the coins
    var temp = m;
 
    // If watermelons needed are greater
    // than given watermelons
    if (vl > n)
        return false;
 
    // Store remaining watermelons if vl
    // watermelons are used to buy mangoes
    var ex = n - vl;
 
    // Store the value of coins if these
    // watermelon get sold
    ex *= y;
 
    // Increment coins by ex
    temp += ex;
 
    // Number of mangoes that can be buyed
    // if only x coins needed for one mango
    var cr = parseInt(temp / x);
 
    // If the condition is satisfied,
    // return true
    if (cr >= vl)
        return true;
 
    // Otherwise return false
    return false;
}
 
// Function to find the maximum number of mangoes
// that can be bought by selling watermelons
function maximizeMangoes(n, m, x, y)
{
    // Initialize the boundary values
    var l = 0, r = n;
 
    // Store the required result
    var ans = 0;
 
    // Binary Search
    while (l <= r) {
 
        // Store the mid value
        var mid = l + parseInt((r - l) / 2);
 
        // Check if it is possible to
        // buy mid number of mangoes
        if (check(n, m, x, y, mid)) {
            ans = mid;
            l = mid + 1;
        }
 
        // Otherwise, update r to mid -1
        else
            r = mid - 1;
    }
 
    // Return the result
    return ans;
}
var W = 4, C = 8, x = 4, y = 4;
 
// Function Call
document.write( maximizeMangoes(W, C, x, y));
 
//This code is contributed by SoumikMondal
</script>


Output: 

3

 

Time Complexity: O(log(W))
Auxiliary Space: O(1)

 

Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!

RELATED ARTICLES

Most Popular

Recent Comments