Maximice la cantidad de aviones que se pueden detener por segundo con la ayuda de la posición y la velocidad iniciales dadas

Dadas dos arrays A[] y B[] que consisten en N enteros donde A[i] representa la posición inicial del i -ésimo avión y B[i] es la velocidad a la que aterriza el avión, la tarea es imprimir el número del avión que se puede evitar que aterrice disparando un avión cada segundo.

Ejemplos:

Entrada: A[] = {1, 3, 5, 4, 8}, B[] = {1, 2, 2, 1, 2}
Salida: 4
Explicación: 

  1. En el segundo 1, dispare el avión en el índice 0, las posiciones de los aviones ahora son A[] = {_, 1, 3, 3, 6}.
  2. En el segundo 2, dispare el avión en el índice 1, las posiciones de los aviones ahora son A[] = {_, _, 1, 2, 4}.
  3. En el segundo 3, dispare el avión en el índice 2, las posiciones de los aviones ahora son A[] = {_, _, _, 1, 2}.
  4. En el segundo 4, dispare el avión en el índice 4 o 5, las posiciones de los aviones ahora son A[] = {_, _, _, _, _}.

Por lo tanto, se puede evitar que aterricen un total de 4 aviones.

Entrada: A[] = {2, 8, 2, 3, 1}, B[] = {1, 4, 2, 2, 2}
Salida: 2

Enfoque: El problema dado se puede resolver con base en las siguientes observaciones:

  • Se puede observar que el conteo de aviones que se pueden detener es el conjunto de tiempos distintos que se necesitan para aterrizar para cada avión, ya que a la vez, solo se puede destruir un avión.
  • El tiempo que tarda un avión en aterrizar es A[i] / B[i] y se puede calcular con la fórmula: Tiempo = Distancia / Velocidad

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

  • Inicialice un Hash-Set , digamos S que almacena los tiempos necesarios para el aterrizaje del avión.
  • Itere sobre un rango [0, N] usando la variable i y realice las siguientes tareas:
    • Inicialice una variable, diga t como 1 si el valor de A[i]%B[i] es mayor que 0 . De lo contrario, actualice la variable t como 0 .
    • Agregue el valor de A[i]/B[i] a la variable, digamos t .
    • Agregue el valor de t en HashSet S .
  • Después de realizar los pasos anteriores, devuelva el tamaño de HashSet como la respuesta resultante.

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 find maximum number
// of planes that can be stopped
// from landing
int maxPlanes(int A[], int B[], int N)
{
   
    // Stores the times needed for
    // landing for each plane
    set<int> St;
 
    // Iterate over the arrays
    for (int i = 0; i < N; i++) {
 
        // Stores the time needed for
        // landing of current plane
        int t = (A[i] % B[i] > 0) ? 1 : 0;
 
        // Update the value of t
        t += (A[i] / B[i]) + t;
 
        // Append the t in set St
        St.insert(t);
    }
 
    // Return the answer
    return St.size();
}
 
 // Driver Code
int main() {
 
    int A[] = { 1, 3, 5, 4, 8 };
    int B[] = { 1, 2, 2, 1, 2 };
      int N = sizeof(A)/sizeof(A[0]);
   
    cout << maxPlanes(A, B, N);
             
    return 0;
}
 
// This code is contributed by Dharanendra L V.

Java

// Java program for the above approach
 
import java.util.*;
 
class GFG {
 
    // Function to find maximum number
    // of planes that can be stopped
    // from landing
    static int maxPlanes(int[] A, int[] B)
    {
        // Stores the times needed for
        // landing for each plane
        Set<Integer> St = new HashSet<>();
 
        // Iterate over the arrays
        for (int i = 0; i < A.length; i++) {
 
            // Stores the time needed for
            // landing of current plane
            int t = (A[i] % B[i] > 0) ? 1 : 0;
 
            // Update the value of t
            t += (A[i] / B[i]) + t;
 
            // Append the t in set St
            St.add(t);
        }
 
        // Return the answer
        return St.size();
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        int[] A = { 1, 3, 5, 4, 8 };
        int[] B = { 1, 2, 2, 1, 2 };
        System.out.println(
            maxPlanes(A, B));
    }
}

Python3

# Python program for the above approach
 
# Function to find maximum number
# of planes that can be stopped
# from landing
def maxPlanes(A, B, N):
     
    # Stores the times needed for
    # landing for each plane
    St = set()
     
    # Iterate over the arrays
    for i in range(N):
         
        # Stores the time needed for
        # landing of current plane
        t = 1 if (A[i] % B[i] > 0) else 0
         
        # Update the value of t
        t += (A[i] // B[i]) + t
         
        # Append the t in set St
        St.add(t)
         
    # Return the answer
    return len(St)
 
# Driver Code
A = [ 1, 3, 5, 4, 8 ]
B = [ 1, 2, 2, 1, 2 ]
N = len(A)
print(maxPlanes(A, B, N))
 
# This code is contributed by shivanisinghss2110

C#

// C# program for the above approach
using System;
using System.Collections.Generic;
 
public class GFG
{
   
    // Function to find maximum number
    // of planes that can be stopped
    // from landing
    static int maxPlanes(int[] A, int[] B)
    {
       
        // Stores the times needed for
        // landing for each plane
         HashSet<int> St = new HashSet<int>();
 
        // Iterate over the arrays
        for (int i = 0; i < A.Length; i++) {
 
            // Stores the time needed for
            // landing of current plane
            int t = (A[i] % B[i] > 0) ? 1 : 0;
 
            // Update the value of t
            t += (A[i] / B[i]) + t;
 
            // Append the t in set St
            St.Add(t);
        }
 
        // Return the answer
        return St.Count;
    }
   
  // Driver code
    static public void Main (){
 
       int[] A = { 1, 3, 5, 4, 8 };
        int[] B = { 1, 2, 2, 1, 2 };
        Console.WriteLine(
            maxPlanes(A, B));
    }
}
 
// This code is contributed by Potta Lokesh

Javascript

<script>
 
    // Function to find maximum number
    // of planes that can be stopped
    // from landing
    function maxPlanes(A, B)
    {
     
        // Stores the times needed for
        // landing for each plane
        let St = new Set();
 
        // Iterate over the arrays
        for (let i = 0; i < A.length; i++) {
 
            // Stores the time needed for
            // landing of current plane
            let t = (A[i] % B[i] > 0) ? 1 : 0;
 
            // Update the value of t
            t += Math.floor(A[i] / B[i]) + t;
 
            // Append the t in set St
            St.add(t);
        }
 
        // Return the answer
        return St.size;
    }
 
// Driver Code
        let A = [ 1, 3, 5, 4, 8 ];
        let B = [ 1, 2, 2, 1, 2 ];
        document.write(
            maxPlanes(A, B));
     
    // This code is contributed by sanjoy_62.
</script>
Producción: 

3

 

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

Publicación traducida automáticamente

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