Cree una array de tamaño N con suma S tal que no exista ningún subarreglo con suma S o SK

Dado un número N y un entero S , la tarea es crear una array de N enteros tal que la suma de todos los elementos sea igual a S e imprimir un elemento K donde 0 ≤ K ≤ S, tal que no exista ningún subarreglo con suma igual a K o (S – K)
Si tal array no es posible, imprima «-1» .
Nota: Puede haber más de un valor para K . Puedes imprimir cualquiera de ellos.
Ejemplos: 
 

Entrada: N = 1, S = 4 
Salida: {4} 
K = 2 
Explicación: 
existe una array {4} cuya suma es 4. 
De todos los valores posibles de K, es decir, 0 ≤ K ≤ 4, K = 1, 2 , y 3 satisfacen las condiciones dadas. 
Para K = 2, no hay subarreglo cuya suma sea 2 o S – K, es decir, 4 – 2 = 2.
Entrada: N = 3, S = 8 
Salida: {2, 2, 4} 
K = 1 
Explicación: 
existe una array {2, 2, 4} y existe K como 1 tal que no hay subarreglo cuya suma sea 1 y S – K, es decir, 8 – 1 = 7. 
 

Planteamiento: Para resolver el problema mencionado anteriormente tenemos que observar que: 
 

  1. Si 2 * N > S entonces no hay array posible. 
    Por ejemplo:

Para N = 3 y S = 4, las arrays posibles son {1, 2, 1}, {1, 1, 2}, {2, 1, 1}. 
Los valores posibles para K son 0, 1, 2, 3 (0 < = k < = S). 
Pero no hay valor para K que satisfaga la condición. 
Entonces la solución a esto no es posible. 
 

  1. Una array solo es posible si 2 * N <= S y la array se puede crear usando elementos (N-1) multiplicados por 2 y el último elemento como S – (2 * (N – 1)) y K siempre será 1.

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

C++

// C++ for the above approach
#include<bits/stdc++.h>
using namespace std;
     
// Function to create an array with
// N elements with sum as S such that
// the given conditions satisfy
void createArray(int n, int s)
{
     
    // Check if the solution exists
    if (2 * n <= s)
    {
 
        // Print the array as
        // print (n-1) elements
        // of array as 2
        for(int i = 0; i < n - 1; i++)
        {
           cout << "2" << " ";
           s -= 2;
        }
 
        // Print the last element
        // of the array
        cout << s << endl;
 
        // Print the value of k
        cout << "1" << endl;
    }
    else
     
        // If solution doesnot exists
        cout << "-1" << endl;
}
 
// Driver Code
int main()
{
     
    // Given N and sum S
    int N = 1;
    int S = 4;
 
    // Function call
    createArray(N, S);
}
 
// This code is contributed by Ritik Bansal

Java

// Java for the above approach
class GFG{
     
// Function to create an array with
// N elements with sum as S such that
// the given conditions satisfy
static void createArray(int n, int s)
{
 
    // Check if the solution exists
    if (2 * n <= s)
    {
 
        // Print the array as
        // print (n-1) elements
        // of array as 2
        for (int i = 0; i < n - 1; i++)
        {
            System.out.print(2 + " ");
            s -= 2;
        }
 
        // Print the last element
        // of the array
        System.out.println(s);
 
        // Print the value of k
        System.out.println(1);
    }
    else
     
        // If solution doesnot exists
        System.out.print("-1");
}
 
// Driver Code
public static void main(String[] args)
{
 
    // Given N and sum S
    int N = 1;
    int S = 4;
 
    // Function call
    createArray(N, S);
}
}
 
// This code is contributed by 29AjayKumar

Python3

# Python3 for the above approach
 
# Function to create an array with
# N elements with sum as S such that
# the given conditions satisfy
def createArray(n, s):
  
    # Check if the solution exists
    if (2 * n<= s):            
         
        # Print the array as
        # print (n-1) elements
        # of array as 2
        for i in range(n-1):
            print(2, end =" ")
            s-= 2
             
        # Print the last element
        # of the array
        print(s)
         
        # Print the value of k
        print(1)
    else:
        # If solution doesnot exists
        print('-1')
 
 
# Driver Code
 
# Given N and sum S 
N = 1
S = 4
 
# Function call
createArray(N, S)

C#

// C# program for the above approach
using System;
class GFG{
     
// Function to create an array with
// N elements with sum as S such that
// the given conditions satisfy
static void createArray(int n, int s)
{
     
    // Check if the solution exists
    if (2 * n <= s)
    {
 
        // Print the array as
        // print (n-1) elements
        // of array as 2
        for(int i = 0; i < n - 1; i++)
        {
           Console.Write(2 + " ");
           s -= 2;
        }
 
        // Print the last element
        // of the array
        Console.WriteLine(s);
 
        // Print the value of k
        Console.WriteLine(1);
    }
    else
     
        // If solution doesnot exists
        Console.Write("-1");
}
 
// Driver Code
public static void Main()
{
 
    // Given N and sum S
    int N = 1;
    int S = 4;
 
    // Function call
    createArray(N, S);
}
}
 
// This code is contributed by Code_Mech

Javascript

<script>
 
// JavaScript program to implement
// the above approach
 
// Function to create an array with
// N elements with sum as S such that
// the given conditions satisfy
function createArray(n, s)
{
   
    // Check if the solution exists
    if (2 * n <= s)
    {
   
        // Print the array as
        // print (n-1) elements
        // of array as 2
        for (let i = 0; i < n - 1; i++)
        {
             document.write(2 + " ");
            s -= 2;
        }
   
        // Print the last element
        // of the array
         document.write(s + "<br/>");
   
        // Print the value of k
         document.write(1);
    }
    else
       
        // If solution doesnot exists
         document.write("-1");
}
 
// Driver code
 
   // Given N and sum S
    let N = 1;
    let S = 4;
   
    // Function call
    createArray(N, S);
 
// This code is contributed by sanjoy_62.
</script>
Producción: 

4
1

 

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

Publicación traducida automáticamente

Artículo escrito por guptaaakash63 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 *