# Count of minimum reductions required to get the required sum K

Given N pairs of integers and an integer K, the task is to find the minimum number of reductions required such that the sum of the first elements of each pair is ≤ K.Each reduction involves reducing the first value of a pair to its second value. If it is not possible to make the sum ≤ K, print -1.

Examples:
Input: N = 5, K = 32
10 6
6 4
8 5
9 8
5 2
Output: 2
Explanation:
Total Sum = 10 + 6 + 8 + 9 + 5 = 38 > K
Reducing 10 – > 6 and 8 – > 5 reduces the sum to 31( 6 + 6 + 5 + 9 + 5) which is less than K.

Input: N = 4, K = 25
10 5
20 9
12 10
4 2
Output: -1

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

Approach:
Follow the steps below to solve the problem:

1. Calculate the sum of the first element of every pair. If the sum is already ≤ K, print 0.
2. Sort the given pairs based on their difference.
3. Count the number of differences of pairs that need to be added in non-increasing order to get the sum to be less than K.
4. If the sum exceeds K after traversal of all pairs, print -1. Otherwise, print the count.

Below is the implementation of the above approach:

## C++

 `// C++ Program to find the count of ` `// minimum reductions required to ` `// get the required sum K ` `#include ` `using` `namespace` `std; ` ` `  `// Function to return the count ` `// of minimum reductions ` `int` `countReductions( ` `    ``vector >& v, ` `    ``int` `K) ` `{ ` ` `  `    ``int` `sum = 0; ` `    ``for` `(``auto` `i : v) { ` `        ``sum += i.first; ` `    ``} ` ` `  `    ``// If the sum is already ` `    ``// less than K ` `    ``if` `(sum <= K) { ` `        ``return` `0; ` `    ``} ` ` `  `    ``// Sort in non-increasing ` `    ``// order of difference ` `    ``sort(v.begin(), v.end(), ` `         ``[&]( ` `             ``pair<``int``, ``int``> a, ` `             ``pair<``int``, ``int``> b) { ` `             ``return` `(a.first - a.second) ` `                    ``> (b.first - b.second); ` `         ``}); ` ` `  `    ``int` `i = 0; ` `    ``while` `(sum > K && i < v.size()) { ` `        ``sum -= (v[i].first ` `                ``- v[i].second); ` `        ``i++; ` `    ``} ` ` `  `    ``if` `(sum <= K) ` `        ``return` `i; ` ` `  `    ``return` `-1; ` `} ` ` `  `// Driver Code ` `int` `main() ` `{ ` `    ``int` `N = 4, K = 25; ` ` `  `    ``vector > v(N); ` `    ``v = { 10, 5 }; ` `    ``v = { 20, 9 }; ` `    ``v = { 12, 10 }; ` `    ``v = { 4, 2 }; ` ` `  `    ``// Function Call ` `    ``cout << countReductions(v, K) ` `         ``<< endl; ` `    ``return` `0; ` `} `

Output:

```-1
```

Time Complexity:O(NlogN)
Auxillary Space:O(1) My Personal Notes arrow_drop_up Check out this Author's contributed articles.

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.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.