Given three integers A, B and C, the task is to count the number of ways to divide C into two parts and add to A and B such that A is strictly greater than B.
Input: A = 5, B = 3, C = 4
The possible values of A and B after dividing C are:
A = 7, B = 5 where C is divided into 2 and 2.
A = 8, B = 4 where C is divided into 3 and 1.
A – 9, B = 3 where C is divided into 4 and 0.
Input: A = 3, B = 5, C = 5
Approach: On observing carefully, the following relation is formed for this problem.
- Let addA and addB be added to A and B respectively.
- Therefore, addA + addB = C and it should satisfy the inequality A + addA > B + addB.
- Now, since addB = C – addA and put it in the inequality:
A + addA > B + (C - addA) or, 2addA > C + B - A or, 2addA >= C + B - A + 1 or, addA >= (C + B - A + 1) / 2
- Since addA must be non negative, addA = max(0, (C + B – A + 1) / 2).
- The division should be ceiling division, thus we can rewrite as addA = max(0, (C + B – A + 2) / 2).
- Let this value be equal to minAddA. Since all integer values addA from [minAddA, C], satisfies the relation A + addA > B + addB, so the required number of ways is equal to max(0, C – minAddA + 1).
Below is the implementation of the above approach:
Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more, please refer Complete Interview Preparation Course.