Número de operaciones necesarias para regar todas las plantas

Dada una array arr[] de N enteros donde el i -ésimo elemento representa la cantidad de agua requerida por la planta en el i -ésimo índice y un entero K , la tarea es calcular el número de operaciones requeridas para regar todas las plantas usando un recipiente que puede contener como máximo K litros de agua en donde cada operación,

  • Puede moverse a la planta adyacente a la izquierda oa la derecha.
  • Además, hay un río en el índice -1 desde donde se puede rellenar el contenedor tantas veces como se desee.
  • Tenga en cuenta que inicialmente, en el índice -1 y cualquier planta no se puede regar parcialmente durante ningún paso.

Ejemplos:

Entrada: arr[] = {2, 2, 3, 3}, K = 5
Salida: 14
Explicación: Para el ejemplo anterior, durante las primeras 2 operaciones: las plantas en el índice 0 y 1 se pueden regar. 
Como no tenemos suficiente agua para la 3ra planta, regresar al río en 2 operaciones.
Rellenar el contenedor y volver a la 3ª planta en 3 operaciones. 
Del mismo modo, no tenemos suficiente agua para la cuarta planta. 
Así que rellene el contenedor y regrese a la 4ª planta en un total de 7 operaciones. 
Por lo tanto, se requieren un total de 14 operaciones.

Entrada: arr[] = {1, 2, 3, 4}, K = 3
Salida: -1
Explicación: No es posible regar completamente la cuarta planta usando un recipiente de capacidad 3.

 

Enfoque: El problema dado es un problema basado en la implementación. Se puede resolver siguiendo los siguientes pasos:

  • Cree una variable current_capacity para almacenar la cantidad actual de agua en el contenedor. Inicialmente, current_capacity = K .
  • Recorra la array dada arr[] usando una variable i y realice las siguientes operaciones:
    • Si arr[i] > K , devuelve -1 .
    • Si arr[i] > current_capacity , agregue 2*i + 1 al recuento de operaciones y establezca current_capacity = K – arr[i] .
    • De lo contrario, agregue 1 al recuento de operaciones y establezca current_capacity = current_capacity – arr[i] .

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

C++

// C++ program of the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find count of operation
// required to water all the plants
int reqOperationCnt(vector<int>& arr, int K)
{
 
    // Stores current capacity
    // of the container
    int current_capacity = K;
 
    // Stores the final count
    int cnt = 0;
 
    // Loop to traverse arr[]
    for (int i = 0; i < arr.size(); i++) {
 
        // If required water is
        // more than max capacity
        if (arr[i] > K) {
            return -1;
        }
 
        // If container does not
        // have enough water
        if (current_capacity < arr[i]) {
 
            // Update cnt
            cnt += 2 * i + 1;
 
            // Update current capacity
            // to the remaining water
            current_capacity = K - arr[i];
        }
        else {
 
            // Update current capacity
            cnt++;
            current_capacity -= arr[i];
        }
    }
 
    // Return Answer
    return cnt;
}
 
// Driver Code
int main()
{
 
    vector<int> arr{ 2, 2, 3, 3 };
    int K = 5;
    cout << reqOperationCnt(arr, K);
 
    return 0;
}

Java

// Java program for the above approach
import java.util.*;
public class GFG {
 
  // Function to find count of operation
  // required to water all the plants
  static int reqOperationCnt(int []arr, int K)
  {
 
    // Stores current capacity
    // of the container
    int current_capacity = K;
 
    // Stores the final count
    int cnt = 0;
 
    // Loop to traverse arr[]
    for (int i = 0; i < arr.length; i++) {
 
      // If required water is
      // more than max capacity
      if (arr[i] > K) {
        return -1;
      }
 
      // If container does not
      // have enough water
      if (current_capacity < arr[i]) {
 
        // Update cnt
        cnt += 2 * i + 1;
 
        // Update current capacity
        // to the remaining water
        current_capacity = K - arr[i];
      }
      else {
 
        // Update current capacity
        cnt++;
        current_capacity -= arr[i];
      }
    }
 
    // Return Answer
    return cnt;
  }
 
  // Driver code
  public static void main (String args[]) {
    int []arr = { 2, 2, 3, 3 };
    int K = 5;
    System.out.println(reqOperationCnt(arr, K));
  }
}
 
// This code is contributed by Samim Hossain Mondal.

C#

// C# program for the above approach
using System;
class GFG {
 
  // Function to find count of operation
  // required to water all the plants
  static int reqOperationCnt(int []arr, int K)
  {
 
    // Stores current capacity
    // of the container
    int current_capacity = K;
 
    // Stores the final count
    int cnt = 0;
 
    // Loop to traverse arr[]
    for (int i = 0; i < arr.Length; i++) {
 
      // If required water is
      // more than max capacity
      if (arr[i] > K) {
        return -1;
      }
 
      // If container does not
      // have enough water
      if (current_capacity < arr[i]) {
 
        // Update cnt
        cnt += 2 * i + 1;
 
        // Update current capacity
        // to the remaining water
        current_capacity = K - arr[i];
      }
      else {
 
        // Update current capacity
        cnt++;
        current_capacity -= arr[i];
      }
    }
 
    // Return Answer
    return cnt;
  }
 
  // Driver code
  public static void Main () {
    int []arr = { 2, 2, 3, 3 };
    int K = 5;
    Console.Write(reqOperationCnt(arr, K));
  }
}
 
// This code is contributed by Samim Hossain Mondal.

Python3

# Python code for the above approach
 
# Function to find count of operation
# required to water all the plants
def reqOperationCnt(arr, K):
 
    # Stores current capacity
    # of the container
    current_capacity = K
 
    # Stores the final count
    cnt = 0
 
    # Loop to traverse arr[]
    for i in range(len(arr)):
 
        # If required water is
        # more than max capacity
        if (arr[i] > K):
            return -1
 
        # If container does not
        # have enough water
        if (current_capacity < arr[i]):
 
            # Update cnt
            cnt += 2 * i + 1
 
            # Update current capacity
            # to the remaining water
            current_capacity = K - arr[i]
 
        else:
 
            # Update current capacity
            cnt += 1
            current_capacity -= arr[i]
 
    # Return Answer
    return cnt
 
# Driver Code
arr = [2, 2, 3, 3]
K = 5
print(reqOperationCnt(arr, K))
 
# This code is contributed by Saurabh Jaiswal

Javascript

<script>
      // JavaScript code for the above approach
 
      // Function to find count of operation
      // required to water all the plants
      function reqOperationCnt(arr, K) {
 
          // Stores current capacity
          // of the container
          let current_capacity = K;
 
          // Stores the final count
          let cnt = 0;
 
          // Loop to traverse arr[]
          for (let i = 0; i < arr.length; i++) {
 
              // If required water is
              // more than max capacity
              if (arr[i] > K) {
                  return -1;
              }
 
              // If container does not
              // have enough water
              if (current_capacity < arr[i]) {
 
                  // Update cnt
                  cnt += 2 * i + 1;
 
                  // Update current capacity
                  // to the remaining water
                  current_capacity = K - arr[i];
              }
              else {
 
                  // Update current capacity
                  cnt++;
                  current_capacity -= arr[i];
              }
          }
 
          // Return Answer
          return cnt;
      }
 
      // Driver Code
      let arr = [2, 2, 3, 3];
      let K = 5;
      document.write(reqOperationCnt(arr, K));
 
     // This code is contributed by Potta Lokesh
  </script>
Producción

14

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

Publicación traducida automáticamente

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