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

Check out this Author's contributed articles.

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.





Article Tags :
Practice Tags :


1


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