# 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 . 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
```

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

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

 `// Function to find the maximum number ` `// of parallelograms can be made ` `#include ` `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*/`

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.