Genere una array de longitud N con una suma igual al doble de la suma de su diferencia absoluta con elementos del mismo índice de una array dada

Dada una array arr[] de tamaño N , la tarea es construir una array brr[] de tamaño N que satisfaga las siguientes condiciones:

  • En cada par de elementos consecutivos del arreglo brr[] , un elemento debe ser divisible por el otro, es decir, brr[i] debe ser divisible por brr[i + 1] o viceversa.
  • Cada i -ésimo elemento en la array brr[] debe satisfacer brr[i] >= arr[i] / 2 .
  • La suma de los elementos del arreglo arr[] debe ser mayor o igual a 2 * Σabs(arr[i] – brr[i]) .

Ejemplos:

Entrada: arr[] = { 11, 5, 7, 3, 2 } 
Salida: 8 4 4 2 2 
Explicación: 
abs(11 – 8) + abs(5 – 4) + abs(7 – 4) + abs(3 – 2) + abs(2 – 2) = 8 
arr[0] + arr[1] + … + arr[4] = 28 
2 * 8 <= 28 y para cada i -ésimo elemento brr[i] >= arr[ i] / 2. 
Por lo tanto, uno de los posibles valores de brr[] es 8 4 4 2 2.

Entrada: arr[] = { 11, 7, 5 } 
Salida: { 8, 4, 4 }

Enfoque: La idea se basa en la siguiente observación:

Si brr[i] es la potencia de 2 más cercana y es menor o igual que arr[i] , entonces brr[i] debe ser mayor o igual que arr[i] / 2 y también la suma de los elementos del arreglo , arr[] debe ser mayor o igual que 2 * Σabs(arr[i] – brr[i]) .

Siga los pasos a continuación para resolver el problema:

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to construct an array
// with given conditions
void constructArray(int arr[], int N)
{
    int brr[N] = { 0 };
 
    // Traverse the array arr[]
    for (int i = 0; i < N; i++) {
 
        int K = log(arr[i]) / log(2);
 
        // Stores closest power of 2
        // less than or equal to arr[i]
        int R = pow(2, K);
 
        // Stores R into brr[i]
        brr[i] = R;
    }
 
    // Print array elements
    for (int i = 0; i < N; i++) {
        cout << brr[i] << " ";
    }
}
 
// Driver Code
int main()
{
 
    // Given array
    int arr[] = { 11, 5, 7, 3, 2 };
 
    // Size of the array
    int N = sizeof(arr) / sizeof(arr[0]);
 
    // Function Call
    constructArray(arr, N);
 
    return 0;
}

Java

// Java program for the above approach
import java.util.*;
 
class GFG{
 
// Function to construct an array
// with given conditions
static void constructArray(int arr[], int N)
{
    int brr[] = new int[N];
     
    // Traverse the array arr[]
    for(int i = 0; i < N; i++)
    {
        int K = (int)(Math.log(arr[i]) /
                      Math.log(2));
         
        // Stores closest power of 2
        // less than or equal to arr[i]
        int R = (int)Math.pow(2, K);
         
        // Stores R into brr[i]
        brr[i] = R;
    }
     
    // Print array elements
    for(int i = 0; i < N; i++)
    {
        System.out.print(brr[i] + " ");
    }
}
 
// Driver Code
public static void main(String[] args)
{
     
    // Given array
    int arr[] = { 11, 5, 7, 3, 2 };
 
    // Size of the array
    int N = arr.length;
 
    // Function Call
    constructArray(arr, N);
}
}
 
// This code is contributed by 29AjayKumar

Python3

# Python3 program for the above approach
from math import log
 
# Function to construct an array
# with given conditions
def constructArray(arr, N):
    brr = [0]*N
 
    # Traverse the array arr[]
    for i in range(N):
        K = int(log(arr[i])/log(2))
 
        # Stores closest power of 2
        # less than or equal to arr[i]
        R = pow(2, K)
 
        # Stores R into brr[i]
        brr[i] = R
 
    # Print array elements
    for i in range(N):
        print(brr[i], end = " ")
 
# Driver Code
if __name__ == '__main__':
   
  # Given array
    arr = [11, 5, 7, 3, 2]
 
    # Size of the array
    N = len(arr)
 
    # Function Call
    constructArray(arr, N)
 
# This code is contributed by mohit kumar 29

C#

// C# program for the above approach   
using System;   
      
class GFG{   
      
// Function to construct an array   
// with given conditions   
static void constructArray(int []arr, int N)   
{   
    int[] brr = new int[N];   
    Array.Clear(brr, 0, brr.Length);   
     
    // Traverse the array arr[]   
    for(int i = 0; i < N; i++)
    {   
        int K = (int)(Math.Log(arr[i]) /
                      Math.Log(2));   
                       
        // Stores closest power of 2   
        // less than or equal to arr[i]   
        int R = (int)Math.Pow(2, K);   
         
        // Stores R into brr[i]   
        brr[i] = R;   
    }   
      
    // Print array elements   
    for(int i = 0; i < N; i++)
    {
        Console.Write(brr[i] + " ");   
    }   
}   
      
// Driver Code   
public static void Main()   
{   
     
    // Given array   
    int []arr = { 11, 5, 7, 3, 2 };   
      
    // Size of the array   
    int N = arr.Length;   
      
    // Function Call   
    constructArray(arr, N);   
}   
}
 
// This code is contributed by SURENDRA_GANGWAR

Javascript

<script>
 
// JavaScript program for the above approach
 
    // Function to construct an array
    // with given conditions
    function constructArray(arr , N) {
        var brr = Array(N).fill(0);
 
        // Traverse the array arr
        for (i = 0; i < N; i++) {
            var K = parseInt( (Math.log(arr[i]) / Math.log(2)));
 
            // Stores closest power of 2
            // less than or equal to arr[i]
            var R = parseInt( Math.pow(2, K));
 
            // Stores R into brr[i]
            brr[i] = R;
        }
 
        // Print array elements
        for (i = 0; i < N; i++) {
            document.write(brr[i] + " ");
        }
    }
 
    // Driver Code
     
 
        // Given array
        var arr = [ 11, 5, 7, 3, 2 ];
 
        // Size of the array
        var N = arr.length;
 
        // Function Call
        constructArray(arr, N);
 
// This code is contributed by todaysgaurav
 
</script>
Producción: 

8 4 4 2 2

 

Complejidad temporal: O(N)
Espacio auxiliar: O(N)

Publicación traducida automáticamente

Artículo escrito por aniket173000 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *