Recuento de cuatrillizos con suma dada | conjunto 3

Dadas cuatro arrays que contienen elementos enteros y una suma de enteros , la tarea es contar los cuatrillizos de modo que cada elemento se elija de una array diferente y la suma de los cuatro elementos sea igual a la suma dada .

Ejemplos:

Entrada: P[] = {0, 2}, Q[] = {-1, -2}, R[] = {2, 1}, S[] = {2, -1}, sum = 0
Salida: 2
(0, -1, 2, -1) y (2, -2, 1, -1) son los cuatrillizos requeridos.

Entrada: P[] = {1, -1, 2, 3, 4}, Q[] = {3, 2, 4}, R[] = {-2, -1, 2, 1}, S[] = {4, -1}, suma = 3
Salida: 10

Enfoque: Se han discutido dos enfoques diferentes para resolver este problema en el Conjunto 1 y el Conjunto 2 de este artículo. Aquí, se discutirá un enfoque que utiliza la búsqueda binaria .
Elija dos arrays y calcule todas las sumas de pares posibles y guárdelas en un vector. Ahora, elija las otras dos arrays y calcule todas las sumas posibles y para cada suma diga tempSum , verifique si sum – temp existe en el vector creado anteriormente (después de ordenarlo ) usando la búsqueda binaria.

A continuación se muestra la implementación del enfoque anterior:

// C++ implementation of the approach
#include <bits/stdc++.h>
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;
}
Producción:

2

Publicación traducida automáticamente

Artículo escrito por everythingispossible y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *