Dados N números (N es un número par). Divida los N números en N/2 pares de tal manera que la suma de los cuadrados de la suma de los números en pares sea mínima. La tarea es imprimir la suma mínima.
Ejemplos:
Input: a[] = {8, 5, 2, 3} Output: 164 Divide them into two groups of {2, 8} and {3, 5} to give (2+8)2 + (3+5)2 = 164 Input: a[] = {1, 1, 1, 2, 2, 2} Output: 27
Enfoque: La tarea es minimizar la suma de los cuadrados, por lo tanto, dividimos el número más pequeño y el más grande en el primer grupo y el segundo más pequeño y el segundo más grande en el segundo grupo, y así sucesivamente hasta que se formen N/2 grupos. Suma los números y almacena la suma de los cuadrados de ellos que será la respuesta final.
A continuación se muestra la implementación del enfoque anterior:
C++
// C++ program to minimize the sum // of squares of sum of numbers // of N/2 groups of N numbers #include <bits/stdc++.h> using namespace std; // Function that returns the minimize sum // of square of sum of numbers of every group int findMinimal(int a[], int n) { // Sort the array elements sort(a, a + n); int sum = 0; // Iterate for the first half of array for (int i = 0; i < n / 2; i++) sum += (a[i] + a[n - i - 1]) * (a[i] + a[n - i - 1]); return sum; } // Driver Code int main() { int a[] = { 8, 5, 2, 3 }; int n = sizeof(a) / sizeof(a[0]); cout << findMinimal(a, n); return 0; }
Java
// Java program to minimize the sum // of squares of sum of numbers // of N/2 groups of N numbers import java.util.Arrays; class GFG { // Function that returns the minimize sum // of square of sum of numbers of every group static int findMinimal(int []a, int n) { // Sort the array elements Arrays.sort(a); int sum = 0; // Iterate for the first half of array for (int i = 0; i < n / 2; i++) sum += (a[i] + a[n - i - 1]) * (a[i] + a[n - i - 1]); return sum; } // Driver Code public static void main(String str[]) { int []a = { 8, 5, 2, 3 }; int n = a.length; System.out.println(findMinimal(a, n)); } } // This code is contributed by Ryuga
Python 3
# Python 3 program to minimize the sum # of squares of sum of numbers # of N/2 groups of N numbers # Function that returns the minimize sum # of square of sum of numbers of every group def findMinimal(a, n): # Sort the array elements a.sort() sum = 0 # Iterate for the first half of array for i in range( n // 2): sum += ((a[i] + a[n - i - 1]) * (a[i] + a[n - i - 1])) return sum # Driver Code if __name__ == "__main__": a = [ 8, 5, 2, 3 ] n = len(a) print(findMinimal(a, n)) # This code is contributed by ita_c
C#
// C# program to minimize the sum // of squares of sum of numbers // of N/2 groups of N numbers using System; class GFG { // Function that returns the minimize sum // of square of sum of numbers of every group static int findMinimal(int []a, int n) { // Sort the array elements Array.Sort(a); int sum = 0; // Iterate for the first half of array for (int i = 0; i < n / 2; i++) sum += (a[i] + a[n - i - 1]) * (a[i] + a[n - i - 1]); return sum; } // Driver Code public static void Main() { int []a = { 8, 5, 2, 3 }; int n = a.Length; Console.Write(findMinimal(a, n)); } } // This code is contributed // by Akanksha Rai
PHP
<?php // PHP program to minimize the sum // of squares of sum of numbers // of N/2 groups of N numbers // Function that returns the minimize sum // of square of sum of numbers of every group function findMinimal($a, $n) { // Sort the array elements sort($a); $sum = 0; // Iterate for the first half of array for ($i = 0; $i < $n / 2; $i++) $sum += ($a[$i] + $a[$n - $i - 1]) * ($a[$i] + $a[$n - $i - 1]); return $sum; } // Driver Code $a = array(8, 5, 2, 3 ); $n = sizeof($a); echo findMinimal($a, $n); // This code is contributed by ajit ?>
Javascript
<script> // java script program to minimize the sum // of squares of sum of numbers // of N/2 groups of N numbers // Function that returns the minimize sum // of square of sum of numbers of every group function findMinimal(a, n) { // Sort the array elements a.sort(); let sum = 0; // Iterate for the first half of array for (let i = 0; i < n / 2; i++) sum += (a[i] + a[n - i - 1]) * (a[i] + a[n - i - 1]); return sum; } // Driver Code let a = [8,5,2,3]; let n = a.length; document.write( findMinimal(a, n)); // This code is contributed by sravan kumar G </script>
164
Complejidad de tiempo: O(N*logN), ya que estamos usando una función de clasificación incorporada que costará N*logN de tiempo. Donde N es el número de elementos de la array.
Espacio auxiliar: O(1), ya que no estamos utilizando ningún espacio adicional.