Related Articles
Count ways to divide C in two parts and add to A and B to make A strictly greater than B
• Last Updated : 21 Apr, 2020

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.

Examples:

Input: A = 5, B = 3, C = 4
Output: 3
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
Output: 2

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

Approach: On observing carefully, the following relation is formed for this problem.

• 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:

## C++

 `// C++ implementation of the above approach`` ` `#include ``using` `namespace` `std;`` ` `// Function 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``int` `countWays(``int` `A, ``int` `B, ``int` `C)``{``    ``// Minimum value added to A to satisfy``    ``// the given relation``    ``int` `minAddA = max(0, (C + B - A + 2) / 2);`` ` `    ``// Number of different values of A, i.e.,``    ``// number of ways to divide C``    ``int` `count_ways = max(C - minAddA + 1, 0);`` ` `    ``return` `count_ways;``}`` ` `// Driver code``int` `main()``{``    ``int` `A = 3, B = 5, C = 5;`` ` `    ``cout << countWays(A, B, C);`` ` `    ``return` `0;``}`

## Java

 `// Java implementation of the above approach``import` `java.util.*;`` ` `class` `GFG{`` ` `    ``// Function 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``    ``static` `int` `countWays(``int` `A, ``int` `B, ``int` `C)``    ``{``        ``// Minimum value added to A to satisfy``        ``// the given relation``        ``int` `minAddA = Math.max(``0``, (C + B - A + ``2``) / ``2``);``     ` `        ``// Number of different values of A, i.e.,``        ``// number of ways to divide C``        ``int` `count_ways = Math.max(C - minAddA + ``1``, ``0``);``     ` `        ``return` `count_ways;``    ``}``     ` `    ``// Driver code``    ``public` `static` `void` `main(String args[])``    ``{``        ``int` `A = ``3``, B = ``5``, C = ``5``;``     ` `        ``System.out.println(countWays(A, B, C));``    ``}``}`` ` `// This code is contributed by AbhiThakur`

## Python3

 `# Python3 implementation of the above approach`` ` `# Function 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``def` `countWays(A, B, C):``     ` `    ``# Minimum value added to A to satisfy``    ``# the given relation``    ``minAddA ``=` `max``(``0``, (C ``+` `B ``-` `A ``+` `2``) ``/``/` `2``)``     ` `    ``# Number of different values of A, i.e.,``    ``# number of ways to divide C``    ``count_ways ``=` `max``(C ``-` `minAddA ``+` `1``, ``0``)``     ` `    ``return` `count_ways`` ` `# Driver code``A ``=` `3``B ``=` `5``C ``=` `5``print``(countWays(A, B, C))`` ` `# This code is contributed by shivanisingh`

## C#

 `// C# implementation of the above approach``using` `System;``  ` `class` `GFG``{`` ` `// Function 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``static` `int` `countWays(``int` `A, ``int` `B, ``int` `C)``{``    ``// Minimum value added to A to satisfy``    ``// the given relation``    ``int` `minAddA = Math.Max(0, (C + B - A + 2) / 2);`` ` `    ``// Number of different values of A, i.e.,``    ``// number of ways to divide C``    ``int` `count_ways = Math.Max(C - minAddA + 1, 0);`` ` `    ``return` `count_ways;``}`` ` `// Driver Code``public` `static` `void` `Main(String[] args)``{``    ``int` `A = 3, B = 5, C = 5;`` ` `    ``Console.Write(countWays(A, B, C));``}`` ` `}`` ` `// This code is contributed by shivanisinghss2110`
Output:
```2
```

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.

My Personal Notes arrow_drop_up