Maximum number of parallelograms that can be made using the given length of line segments

Given N line segments where the length of the ith line segment is a_i. The task is to find the maximum number of parallelograms can be made with those line segments if each line segment is used at most in one parallelogram.

Examples:

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

Approach: Make a frequency array of the length of line segments. Then the answer will be the total number of parallelograms that can be made using 4 similar sides + parallelograms that can be made using 2 similar sides. As a parallelogram must have equal opposite sides.



C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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 */

chevron_right


Python

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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)

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// 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*/

chevron_right


Output:

1


My Personal Notes arrow_drop_up

Recommended Posts:



    Article Tags :
    Practice Tags :


    1


    Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.