Número máximo de paralelogramos que se pueden hacer usando la longitud dada de segmentos de línea

Dados N segmentos de línea donde la longitud del i-ésimo segmento de línea es  a_i . La tarea es encontrar el número máximo de paralelogramos que se pueden hacer con esos segmentos de línea si cada segmento de línea se usa como máximo en un paralelogramo.
Ejemplos: 
 

Input: arr[] = {1, 2, 1, 2}
Output: 1
Only one parallelogram can be made with sides 1, 2, 1, 2

Input: arr[] = {1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7}
Output: 2

Enfoque: Haga una array de frecuencias de la longitud de los segmentos de línea. Entonces la respuesta será el número total de paralelogramos que se pueden hacer con 4 lados iguales + paralelogramos que se pueden hacer con 2 lados iguales. Como un paralelogramo debe tener lados opuestos iguales.
 

C++

// Function to find the maximum number
// of parallelograms can be made
#include <bits/stdc++.h>
using namespace std;
 
void convert(int n, int a[])
{
 
    // Finding the length of the frequency array
    int z = a[0];
    for (int i = 1; i < n; i++) {
        if (a[i] > z)
            z = a[i];
    }
 
    z = z + 1;
 
    int ff[z] = { 0 };
    for (int i = 0; i < n; i++) {
        // Increasing the occurrence of each segment
        ff[a[i]] += 1;
    }
 
    // To store the count of parallelograms
    int cc = 0;
 
    for (int i = 0; i < z; i++) {
        // Counting parallelograms that can
        // be made using 4 similar sides
        cc += int(ff[i] / 4);
        ff[i] = ff[i] % 4;
    }
 
    int vv = 0;
 
    for (int i = 0; i < z; i++) {
        // counting segments which have occurrence left >= 2
        if (ff[i] >= 2)
            vv += 1;
    }
 
    // Adding parallelograms that can be
    // made using 2 similar sides
    cc += int(vv / 2);
    cout << (cc);
}
 
// Driver function
int main()
{
    int n = 4;
    int a[] = { 1, 2, 1, 2 };
    convert(n, a);
}
 
// This code is contributed by
// Surendra_Gangwar

Java

// Function to find the maximum number
// of parallelograms can be made
import java.util.*;
 
class GFG
{
 
static void convert(int n, int a[])
{
 
    // Finding the length of the frequency array
    int z = a[0];
    for (int i = 1; i < n; i++)
    {
        if (a[i] > z)
            z = a[i];
    }
 
    z = z + 1;
 
    int ff[] = new int[z];
    for (int i = 0; i < n; i++)
    {
        // Increasing the occurrence of each segment
        ff[a[i]] += 1;
    }
 
    // To store the count of parallelograms
    int cc = 0;
 
    for (int i = 0; i < z; i++)
    {
        // Counting parallelograms that can
        // be made using 4 similar sides
        cc += (ff[i] / 4);
        ff[i] = ff[i] % 4;
    }
 
    int vv = 0;
 
    for (int i = 0; i < z; i++)
    {
        // counting segments which have occurrence left >= 2
        if (ff[i] >= 2)
            vv += 1;
    }
 
    // Adding parallelograms that can be
    // made using 2 similar sides
    cc += (vv / 2);
    System.out.println(cc);
}
 
// Driver code
public static void main(String[] args)
{
    int n = 4;
    int a[] = { 1, 2, 1, 2 };
    convert(n, a);
}
}
 
/* This code is contributed by PrinciRaj1992 */

Python

# Function to find the maximum number
# of parallelograms can be made
def convert(n, a):
 
    # Finding the length of the frequency array
    z = max(a)+1
 
    ff =[0]*z
    for i in range(n):
 
        # Increasing the occurrence of each segment
        ff[a[i]]+= 1
 
    # To store the count of parallelograms
    cc = 0
 
    for i in range(z):
        # Counting parallelograms that can
        # be made using 4 similar sides
        cc+= ff[i]//4
        ff[i]= ff[i]% 4
 
    vv = 0
 
    for i in range(z):
        # counting segments which have occurrence left >= 2
        if(ff[i]>= 2):
            vv+= 1
 
    # Adding parallelograms that can be
    # made using 2 similar sides
    cc+= vv//2
    print(cc)
 
     
n = 4
a =[1, 2, 1, 2]
convert(n, a)

C#

// Function to find the maximum number
// of parallelograms can be made
using System;
 
class GFG
{
     
static void convert(int n, int []a)
{
 
    // Finding the length of the frequency array
    int z = a[0];
    for (int i = 1; i < n; i++)
    {
        if (a[i] > z)
            z = a[i];
    }
 
    z = z + 1;
 
    int []ff = new int[z];
    for (int i = 0; i < n; i++)
    {
        // Increasing the occurrence of each segment
        ff[a[i]] += 1;
    }
 
    // To store the count of parallelograms
    int cc = 0;
 
    for (int i = 0; i < z; i++)
    {
        // Counting parallelograms that can
        // be made using 4 similar sides
        cc += (ff[i] / 4);
        ff[i] = ff[i] % 4;
    }
 
    int vv = 0;
 
    for (int i = 0; i < z; i++)
    {
        // counting segments which have occurrence left >= 2
        if (ff[i] >= 2)
            vv += 1;
    }
 
    // Adding parallelograms that can be
    // made using 2 similar sides
    cc += (vv / 2);
Console.WriteLine(cc);
}
 
// Driver code
static public void Main ()
{
         
    int n = 4;
    int []a = { 1, 2, 1, 2 };
    convert(n, a);
}
}
 
/* This code is contributed by ajit_23*/

Javascript

<script>
    // Function to find the maximum number
    // of parallelograms can be made
     
    function convert(n, a)
    {
 
        // Finding the length of the frequency array
        let z = a[0];
        for (let i = 1; i < n; i++)
        {
            if (a[i] > z)
                z = a[i];
        }
 
        z = z + 1;
 
        let ff = new Array(z);
        ff.fill(0);
        for (let i = 0; i < n; i++)
        {
            // Increasing the occurrence of each segment
            ff[a[i]] += 1;
        }
 
        // To store the count of parallelograms
        let cc = 0;
 
        for (let i = 0; i < z; i++)
        {
            // Counting parallelograms that can
            // be made using 4 similar sides
            cc += parseInt(ff[i] / 4, 10);
            ff[i] = ff[i] % 4;
        }
 
        let vv = 0;
 
        for (let i = 0; i < z; i++)
        {
            // counting segments which have occurrence left >= 2
            if (ff[i] >= 2)
                vv += 1;
        }
 
        // Adding parallelograms that can be
        // made using 2 similar sides
        cc += parseInt(vv / 2, 10);
        document.write(cc);
    }
     
    let n = 4;
    let a = [ 1, 2, 1, 2 ];
    convert(n, a);
         
</script>
Producción: 

1

 

Publicación traducida automáticamente

Artículo escrito por indrajit1 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 *