# Count of quadruplets with given sum | Set 3

Given four arrays containing integer elements and an integer sum, the task is to count the quadruplets such that each element is chosen from a different array and the sum of all the four elements is equal to the given sum.

Examples:

Input: P[] = {0, 2}, Q[] = {-1, -2}, R[] = {2, 1}, S[] = {2, -1}, sum = 0
Output: 2
(0, -1, 2, -1) and (2, -2, 1, -1) are the required quadruplets.

Input: P[] = {1, -1, 2, 3, 4}, Q[] = {3, 2, 4}, R[] = {-2, -1, 2, 1}, S[] = {4, -1}, sum = 3
Output: 10

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

Approach: Two different approaches to solve this problem has been discussed in Set 1 and Set 2 of this article. Here, an approach using the binary search will be discussed.
Pick any two arrays and calculate all the possible pair sums and store them in a vector. Now, pick the other two arrays and calculate all possible sums and for every sum say tempSum, check whether sum – temp exists in the vector created earlier (after sorting it) using the binary search.

Below is the implementation of the above approach:

 `// C++ implementation of the approach ` `#include ` `using` `namespace` `std; ` ` `  `// Function to return the count ` `// of the required quadruplets ` `int` `countQuadruplets(``int` `arr1[], ``int` `n1, ``int` `arr2[], ` `                     ``int` `n2, ``int` `arr3[], ``int` `n3, ` `                     ``int` `arr4[], ``int` `n4, ``int` `value) ` ` `  `{ ` `    ``vector<``int``> sum1; ` `    ``vector<``int``>::iterator it; ` `    ``vector<``int``>::iterator it2; ` `    ``int` `cnt = 0; ` ` `  `    ``// Take every possible pair sum ` `    ``// from the two arrays ` `    ``for` `(``int` `i = 0; i < n1; i++) { ` `        ``for` `(``int` `j = 0; j < n2; j++) { ` ` `  `            ``// Push the sum to a vector ` `            ``sum1.push_back(arr1[i] + arr2[j]); ` `        ``} ` `    ``} ` ` `  `    ``// Sort the sum vector ` `    ``sort(sum1.begin(), sum1.end()); ` ` `  `    ``// Calculate the pair sums from ` `    ``// the other two arrays ` `    ``for` `(``int` `i = 0; i < n3; i++) { ` `        ``for` `(``int` `j = 0; j < n4; j++) { ` ` `  `            ``// Calculate the sum ` `            ``int` `temp = arr3[i] + arr4[j]; ` ` `  `            ``// Check whether temp can be added to any ` `            ``// sum stored in the sum1 vector such that ` `            ``// the result is the required sum ` `            ``if` `(binary_search(sum1.begin(), sum1.end(), value - temp)) { ` ` `  `                ``// Add the count of such values from the sum1 vector ` `                ``it = lower_bound(sum1.begin(), sum1.end(), value - temp); ` `                ``it2 = upper_bound(sum1.begin(), sum1.end(), value - temp); ` `                ``cnt = cnt + ((it2 - sum1.begin()) - (it - sum1.begin())); ` `            ``} ` `        ``} ` `    ``} ` ` `  `    ``return` `cnt; ` `} ` ` `  `// Driver code ` `int` `main() ` `{ ` `    ``int` `arr1[] = { 0, 2 }; ` `    ``int` `n1 = ``sizeof``(arr1) / ``sizeof``(arr1[0]); ` ` `  `    ``int` `arr2[] = { -1, -2 }; ` `    ``int` `n2 = ``sizeof``(arr2) / ``sizeof``(arr2[0]); ` ` `  `    ``int` `arr3[] = { 2, 1 }; ` `    ``int` `n3 = ``sizeof``(arr3) / ``sizeof``(arr3[0]); ` ` `  `    ``int` `arr4[] = { 2, -1 }; ` `    ``int` `n4 = ``sizeof``(arr4) / ``sizeof``(arr4[0]); ` ` `  `    ``int` `sum = 0; ` ` `  `    ``cout << countQuadruplets(arr1, n1, arr2, n2, ` `                             ``arr3, n3, arr4, n4, sum); ` ` `  `    ``return` `0; ` `} `

Output:

```2
```

My Personal Notes arrow_drop_up

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.