Given three integers X, Y, and N, the task is to find the minimum possible positive product of X and Y that can be obtained by decreasing either the value of X or Y by 1 at most N times.
Examples:
Input: X = 5, Y= 6, N = 4
Output: 6
Explanation:
Decrease the value of X by 4, X = 5 – 4 = 1 and Y = 6.
Therefore, the minimized product = X * Y = 1 * 6 = 6Input: X = 49, Y = 4256, N = 10
Output: 165984
Approach: The given problem can be solved based on the following observations:
If X ? Y: Reducing X minimizes the product.
If Y ? X: Reducing Y minimizes the product.Mathematical Proof:
If (X – 2) * Y < (X – 1) * (Y – 1)
=> X * Y – 2 * Y < X * Y – X – Y + 1
=> – 2 × Y < -X – Y + 1
=> Y > X – 1
Follow the steps below to solve the problem:
-
If X ? Y: Follow the steps below:
- If N < X: Print Y * (X – N) as the answer as reducing X minimizes the product.
- Otherwise, reduce X to 1 and reduce the remaining N from Y to minimize the product. Therefore, print Y – max(1, N – X + 1)) as the required minimized product.
- Otherwise, if N < Y, print X * (Y – N) as the minimized product. If N ? Y, reduce Y to 1 and print max(X – (N – Y + 1), 1) as the minimized product.
Below is the implementation of the above approach:
// C++ program to implement // the above approach #include <bits/stdc++.h> using namespace std;
// Function to minimize // the product of two numbers int minProd( int X, int Y,
int N)
{ if (X <= Y) {
if (N < X)
// Reducing X, N times,
// minimizes the product
return (X - N) * Y;
else {
// Reduce X to 1 and reduce
// remaining N from Y
return max(Y - (N - X + 1), 1);
}
}
if (Y >= N)
// Reducing Y, N times,
// minimizes the product
return (Y - N) * X;
// Reduce Y to 1 and reduce
// remaining N from X
return max(X - (N - Y + 1), 1);
;
} // Driver Code int main()
{ int X = 47, Y = 42, N = 167;
cout << minProd(X, Y, N);
} |
// Java program to implement // the above approach import java.io.*;
class GFG{
// Function to minimize // the product of two numbers static int minProd( int X, int Y,
int N)
{ if (X <= Y)
{
if (N < X)
// Reducing X, N times,
// minimizes the product
return (X - N) * Y;
else
{
// Reduce X to 1 and reduce
// remaining N from Y
return Math.max(Y - (N - X + 1 ), 1 );
}
}
if (Y >= N)
// Reducing Y, N times,
// minimizes the product
return (Y - N) * X;
// Reduce Y to 1 and reduce
// remaining N from X
return Math.max(X - (N - Y + 1 ), 1 );
} // Driver Code public static void main (String[] args)
{ int X = 47 , Y = 42 , N = 167 ;
System.out.println(minProd(X, Y, N));
} } // This code is contributed by code_hunt |
# Python3 program to implement # the above approach # Function to minimize # the product of two numbers def minProd(X, Y, N):
if (X < = Y):
if (N < X):
# Reducing X, N times,
# minimizes the product
return (X - N) * Y
else :
# Reduce X to 1 and reduce
# remaining N from Y
return max (Y - (N - X + 1 ), 1 )
if (Y > = N):
# Reducing Y, N times,
# minimizes the product
return (Y - N) * X
# Reduce Y to 1 and reduce
# remaining N from X
return max (X - (N - Y + 1 ), 1 )
# Driver Code if __name__ = = "__main__" :
X = 47
Y = 42
N = 167
print (minProd(X, Y, N))
# This code is contributed by Chitranayal |
// C# program to implement // the above approach using System;
class GFG{
// Function to minimize // the product of two numbers static int minProd( int X,
int Y, int N)
{ if (X <= Y)
{
if (N < X)
// Reducing X, N times,
// minimizes the product
return (X - N) * Y;
else
{
// Reduce X to 1 and reduce
// remaining N from Y
return Math.Max(Y - (N -
X + 1), 1);
}
}
if (Y >= N)
// Reducing Y, N times,
// minimizes the product
return (Y - N) * X;
// Reduce Y to 1 and reduce
// remaining N from X
return Math.Max(X - (N -
Y + 1), 1);
} // Driver Code public static void Main(String[] args)
{ int X = 47, Y = 42, N = 167;
Console.WriteLine(minProd(X, Y, N));
} } // This code is contributed by Rajput-Ji |
<script> // Javascript program to implement // the above approach // Function to minimize // the product of two numbers function minProd(X, Y, N)
{ if (X <= Y)
{
if (N < X)
// Reducing X, N times,
// minimizes the product
return (X - N) * Y;
else
{
// Reduce X to 1 and reduce
// remaining N from Y
return Math.max(Y - (N - X + 1), 1);
}
}
if (Y >= N)
// Reducing Y, N times,
// minimizes the product
return (Y - N) * X;
// Reduce Y to 1 and reduce
// remaining N from X
return Math.max(X - (N - Y + 1), 1);
} // Driver Code let X = 47, Y = 42, N = 167; document.write(minProd(X, Y, N)); // This code is contributed by target_2 </script> |
1
Time Complexity: O(1)
Auxiliary Space: O(1)