# Maximum of sum of length of rectangles and squares formed by given sticks

• Difficulty Level : Medium
• Last Updated : 16 Jun, 2021

Given an array arr[] consisting of N integers, representing the length of the sticks, the task is to find the maximum sum possible of all lengths of the squares and rectangles constructed using these sticks.
Note A single side can be represented using only a single stick.

Examples:

Input: arr[] = {5, 3, 2, 3, 6, 3, 3}
Output: 12
Sum of length of Squares= 3 * 4 = 12
Sum of length of Rectangles = 0
Input: arr[] = {5, 3, 2, 3, 6, 4, 4, 4, 5, 5, 5 }
Output: 34
Sum of length of Squares = 5 * 4 = 20
Sum of length of Rectangles = 3 * 2 + 4 * 2 = 34

Approach: Follow the steps below to solve the problem:

• Traverse the array to count the frequencies of all the array elements, say freq.
• Count frequencies which are at least 2.
• Convert frequencies to nearest smaller even value.
• Convert the frequencies to single dimensional array in descending order.
• Now, sum elements upto indices which are multiples of 4.
• Print the sum all these elements

Below is the implementation of the above approach:

## C++14

 `#include ` `using` `namespace` `std;`   `// Function to find the maximum of sum` `// of lengths of rectangles and squares` `// formed using given set of sticks` `void` `findSumLength(vector<``int``> arr,``int` `n)` `{`   `    ``// Stores the count of frequencies` `    ``// of all the array elements` `    ``map<``int``,``int``> freq;` `    ``for``(``int` `i:arr) freq[i] += 1;`   `    ``// Stores frequencies which are at least 2` `    ``map<``int``,``int``> freq_2;`   `    ``for` `(``auto` `i:freq)` `    ``{` `        ``if` `(freq[i.first] >= 2)` `            ``freq_2[i.first] = freq[i.first];` `    ``}` `  `  `    ``// Convert all frequencies to nearest` `    ``// smaller even values.` `    ``vector<``int``> arr1;` `    ``for` `(``auto` `i:freq_2)` `        ``arr1.push_back((i.first) * (freq_2[(i.first)]/2)*2);` `    ``sort(arr1.begin(), arr1.end());`   `    ``// Sum of elements up to` `    ``// index of multiples of 4` `    ``int` `summ = 0;` `    ``for` `(``int` `i:arr1)` `        ``summ += i;`   `    ``// Print the sum` `    ``cout << summ;` `}`   `// Driver Code` `int` `main()` `{` `  ``vector<``int``> arr = {5, 3, 2, 3, 6, 4, 4, 4, 5, 5, 5};` `  ``int` `n = arr.size();` `  ``findSumLength(arr, n);` `  ``return` `0;` `}`   `// This code is contributed by mohit kumar 29.`

## Python3

 `# Python3 implementation of` `# the above approach  `   `from` `collections ``import` `Counter`   `# Function to find the maximum of sum` `# of lengths of rectangles and squares` `# formed using given set of sticks ` `def` `findSumLength(arr, n) :  ` `    `  `    ``# Stores the count of frequencies` `    ``# of all the array elements` `    ``freq ``=` `dict``(Counter(arr))` `    `  `    ``# Stores frequencies which are at least 2` `    ``freq_2 ``=` `{}`   `    ``for` `i ``in` `freq:` `        ``if` `freq[i]>``=` `2``:` `            ``freq_2[i] ``=` `freq[i]` `            `  `    ``# Convert all frequencies to nearest` `    ``# smaller even values.` `    ``arr1 ``=` `[]` `    ``for` `i ``in` `freq_2:` `      ``arr1.extend([i]``*``(freq_2[i]``/``/``2``)``*``2``)`   `    ``# Sort the array in descending order` `    ``arr1.sort(reverse ``=` `True``)`   `    ``# Sum of elements up to` `    ``# index of multiples of 4` `    ``summ ``=` `0` `    ``for` `i ``in` `range``((``len``(arr1)``/``/``4``)``*``4``):` `        ``summ``+``=` `arr1[i]` `        `  `    ``# Print the sum` `    ``print``(summ)` `  `  `# Driver Code  ` `if` `__name__ ``=``=` `"__main__"` `:  ` `  `  `    ``arr ``=` `[``5``, ``3``, ``2``, ``3``, ``6``, ``4``, ``4``, ``4``, ``5``, ``5``, ``5``];  ` `    ``n ``=` `len``(arr);  ` `    ``findSumLength(arr, n);`

## C#

 `using` `System;` `using` `System.Collections.Generic;` `class` `GFG{`   `  ``// Function to find the maximum of sum` `  ``// of lengths of rectangles and squares` `  ``// formed using given set of sticks` `  ``static` `void` `findSumLength(List<``int``> arr, ``int` `n)` `  ``{`   `    ``// Stores the count of frequencies` `    ``// of all the array elements` `    ``Dictionary<``int``,``int``> freq = ``new` `Dictionary<``int``,``int``>();` `    ``foreach` `(``int` `i ``in` `arr){` `      ``if``(freq.ContainsKey(i))` `        ``freq[i] += 1;` `      ``else` `        ``freq[i] = 1;` `    ``}`   `    ``// Stores frequencies which are at least 2` `    ``Dictionary<``int``,``int``> freq_2 = ``new` `Dictionary<``int``,``int``>();` `    ``foreach``(KeyValuePair<``int``, ``int``> entry ``in` `freq)` `    ``{` `      ``if` `(freq[entry.Key] >= 2)` `        ``freq_2[entry.Key] = freq[entry.Key];` `    ``}`   `    ``// Convert all frequencies to nearest` `    ``// smaller even values.` `    ``List<``int``> arr1 = ``new` `List<``int``>();` `    ``foreach``(KeyValuePair<``int``, ``int``> entry ``in` `freq_2)` `      ``arr1.Add(entry.Key * (freq_2[entry.Key]/2)*2);` `    ``arr1.Sort();`   `    ``// Sum of elements up to` `    ``// index of multiples of 4` `    ``int` `summ = 0;` `    ``foreach` `(``int` `i ``in` `arr1){` `      ``summ += i;` `    ``}` `    `  `    ``// Print the sum` `    ``Console.WriteLine(summ);` `  ``}`   `  ``// Driver Code` `  ``public` `static` `void` `Main()` `  ``{` `    ``List<``int``> arr = ``new` `List<``int``>(){5, 3, 2, 3, 6, 4, 4, 4, 5, 5, 5};` `    ``int` `n = arr.Count;` `    ``findSumLength(arr, n);`   `  ``}` `}`   `// THIS CODE IS CONTRIBUTED BY SURENDRA_GANGWAR.`

## Javascript

 ``

Output:

`34`

Time Complexity: O(NlogN)
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up
Recommended Articles
Page :