Tiempo mínimo requerido para producir m artículos

Considere n máquinas que producen el mismo tipo de artículos pero a un ritmo diferente, es decir, la máquina 1 tarda 1 segundo en producir un artículo, la máquina 2 tarda 2 segundos en producir un artículo. Dada una array que contiene el tiempo requerido por la i- ésima máquina para producir un artículo. Considerando que todas las máquinas están trabajando simultáneamente, la tarea es encontrar el tiempo mínimo requerido para producir m artículos.

Ejemplos: 

Input : arr[] = {1, 2, 3}, m = 11
Output : 6
In 6 sec, machine 1 produces 6 items, machine 2 produces 3 items,
and machine 3 produces 2 items. So to produce 11 items minimum
6 sec are required.

Input : arr[] = {5, 6}, m = 11
Output : 30

Método 1: (Fuerza bruta) 
Inicialice el tiempo = 0 e increméntelo en 1. Calcule el número de artículos producidos en cada momento hasta que el número de artículos producidos no sea igual a m. 

A continuación se muestra la implementación de la idea anterior:

C++

// C++ program to find minimum time
// required to produce m items.
#include<bits/stdc++.h>
using namespace std;
 
// Return the minimum time required to
// produce m items with given machines.
int minTime(int arr[], int n, int m)
{
    // Initialize time, items equal to 0.
    int t = 0;
 
    while (1)
    {
        int items = 0;
 
        // Calculating items at each second
        for (int i = 0; i < n; i++)
            items += (t / arr[i]);
 
        // If items equal to m return time.
        if (items >= m)
            return t;
 
        t++; // Increment time
    }
}
 
// Driver Code
int main()
{
    int arr[] = { 1, 2, 3 };
    int n = sizeof(arr)/sizeof(arr[0]);
    int m = 11;
 
    cout << minTime(arr, n, m) << endl;
 
    return 0;
}

Java

// Java program to find minimum time
// required to produce m items.
import java.io.*;
 
public class GFG{
 
// Return the minimum time required to
// produce m items with given machines.
static int minTime(int []arr, int n,
                   int m)
{
     
    // Initialize time, items equal to 0.
    int t = 0;
 
    while (true)
    {
        int items = 0;
 
        // Calculating items at each second
        for (int i = 0; i < n; i++)
            items += (t / arr[i]);
 
        // If items equal to m return time.
        if (items >= m)
            return t;
 
        t++; // Increment time
    }
}
 
    // Driver Code
    static public void main (String[] args)
    {
            int []arr = { 1, 2, 3 };
            int n = arr.length;
            int m = 11;
 
    System.out.println(minTime(arr, n, m));
    }
}
 
// This code is contributed by vt_m.

Python3

# Python3 program to find minimum time
# required to produce m items.
import math as mt
 
# Return the minimum time required to
# produce m items with given machines.
def minTime(arr, n, m):
 
    # Initialize time, items equal to 0.
    t = 0
 
    while (1):
     
        items = 0
 
        # Calculating items at each second
        for i in range(n):
            items += (t // arr[i])
 
        # If items equal to m return time.
        if (items >= m):
            return t
 
        t += 1 # Increment time
     
# Driver Code
arr = [1, 2, 3]
n = len(arr)
m = 11
 
print(minTime(arr, n, m) )
 
# This code is contributed by
# Mohit kumar 29

C#

// C# program to find minimum time
// required to produce m items.
using System;
  
public class GFG{
  
// Return the minimum time
// required to produce m
// items with given machines.
static int minTime(int []arr, int n,
                   int m)
{
     
    // Initialize time, items equal to 0.
    int t = 0;
  
    while (true)
    {
        int items = 0;
  
        // Calculating items at each second
        for (int i = 0; i < n; i++)
            items += (t / arr[i]);
  
        // If items equal to m return time.
        if (items >= m)
            return t;
  
        t++; // Increment time
    }
}
  
// Driven Code
static public void Main (String []args)
{
    int []arr = {1, 2, 3};
    int n = arr.Length;
    int m = 11;
  
    // Calling function
    Console.WriteLine(minTime(arr, n, m));
     
}
}

PHP

<?php
// PHP program to find minimum time
// required to produce m items.
 
// Return the minimum time required to
// produce m items with given machines.
function minTime($arr, $n, $m)
{
     
    // Initialize time, items
    // equal to 0.
    $t = 0;
 
    while (1)
    {
        $items = 0;
 
        // Calculating items at each second
        for ( $i = 0; $i < $n; $i++)
            $items += ($t / $arr[$i]);
 
        // If items equal to m return time.
        if ($items >= $m)
            return $t;
 
        $t++; // Increment time
    }
}
 
    // Driver Code
    $arr = array(1, 2, 3);
    $n =count($arr);
    $m = 11;
    echo minTime($arr, $n, $m);
 
// This code is contributed by anuj_67.
?>

Javascript

<script>
 
// JavaScript program to find minimum time
// required to produce m items.
 
// Return the minimum time required to
// produce m items with given machines.
function minTime(arr, n, m)
{
      
    // Initialize time, items equal to 0.
    let t = 0;
  
    while (true)
    {
        let items = 0;
  
        // Calculating items at each second
        for (let i = 0; i < n; i++)
            items += (t / arr[i]);
  
        // If items equal to m return time.
        if (items >= m)
            return t;
  
        t++; // Increment time
    }
}
 
// Driver Code
    let arr = [ 1, 2, 3 ];
    let n = arr.length;
    let m = 11;
  
    document.write(minTime(arr, n, m));
 
</script>

Producción:  

6

Método 2 (eficiente): 
La idea es utilizar Binary Search . El tiempo máximo posible requerido para producir m elementos será el tiempo máximo en la array, a max , multiplicado por m ie a max * m . Por lo tanto, use la búsqueda binaria entre 1 y un máximo * m y encuentre el tiempo mínimo que produce m elementos.

 A continuación se muestra la implementación de la idea anterior:

C++

// Efficient C++ program to find minimum time
// required to produce m items.
#include<bits/stdc++.h>
using namespace std;
 
// Return the number of items can be
// produced in temp sec.
int findItems(int arr[], int n, int temp)
{
    int ans = 0;
    for (int i = 0; i < n; i++)
        ans += (temp/arr[i]);
    return ans;
}
 
// Binary search to find minimum time required
// to produce M items.
int bs(int arr[], int n, int m, int high)
{
    int low = 1;
 
    // Doing binary search to find minimum
    // time.
    while (low < high)
    {
        // Finding the middle value.
        int mid = (low+high)>>1;
 
        // Calculate number of items to
        // be produce in mid sec.
        int itm = findItems(arr, n, mid);
 
        // If items produce is less than
        // required, set low = mid + 1.
        if (itm < m)
            low = mid+1;
 
        //  Else set high = mid.
        else
            high = mid;
    }
 
    return high;
}
 
// Return the minimum time required to
// produce m items with given machine.
int minTime(int arr[], int n, int m)
{
    int maxval = INT_MIN;
 
    // Finding the maximum time in the array.
    for (int i = 0; i < n; i++)
        maxval = max(maxval, arr[i]);
 
    return bs(arr, n, m, maxval*m);
}
 
// Driven Program
int main()
{
    int arr[] = { 1, 2, 3 };
    int n = sizeof(arr)/sizeof(arr[0]);
    int m = 11;
 
    cout << minTime(arr, n, m) << endl;
 
    return 0;
}

Java

// Efficient Java program to find
// minimum time required to
// produce m items.
import java.io.*;
 
public class GFG{
     
// Return the number of items can
// be produced in temp sec.
static int findItems(int []arr, int n,
                     int temp)
{
    int ans = 0;
    for (int i = 0; i < n; i++)
        ans += (temp / arr[i]);
    return ans;
}
 
// Binary search to find minimum time
// required to produce M items.
static int bs(int []arr, int n,
              int m, int high)
              
{
    int low = 1;
 
    // Doing binary search to
    // find minimum time.
    while (low < high)
    {
        // Finding the middle value.
        int mid = (low + high) >> 1;
 
        // Calculate number of items to
        // be produce in mid sec.
        int itm = findItems(arr, n, mid);
 
        // If items produce is less than
        // required, set low = mid + 1.
        if (itm < m)
            low = mid + 1;
 
        // Else set high = mid.
        else
            high = mid;
    }
 
    return high;
}
 
// Return the minimum time required to
// produce m items with given machine.
static int minTime(int []arr, int n,
                   int m)
{
    int maxval = Integer.MIN_VALUE;
 
    // Finding the maximum time in the array.
    for (int i = 0; i < n; i++)
        maxval = Math.max(maxval, arr[i]);
 
    return bs(arr, n, m, maxval * m);
}
 
// Driven Program
static public void main (String[] args)
{
    int []arr = {1, 2, 3};
        int n = arr.length;
    int m = 11;
 
    System.out.println(minTime(arr, n, m));
}
}
 
// This code is contributed by vt_m.

Python3

# Efficient Python3 program to find
# minimum time required to produce m items.
import sys
 
def findItems(arr, n, temp):
    ans = 0
    for i in range(n):
        ans += temp // arr[i]
    return ans
 
# Binary search to find minimum time
# required to produce M items.
def bs(arr, n, m, high):
    low = 1
 
    # Doing binary search to find minimum
    # time.
    while low < high:
 
        # Finding the middle value.
        mid = (low + high) >> 1
 
        # Calculate number of items to
        # be produce in mid sec.
        itm = findItems(arr, n, mid)
 
        # If items produce is less than
        # required, set low = mid + 1.
        if itm < m:
            low = mid + 1
 
        # Else set high = mid.
        else:
            high = mid
    return high
 
# Return the minimum time required to
# produce m items with given machine.
def minTime(arr, n, m):
    maxval = -sys.maxsize
 
    # Finding the maximum time in the array.
    for i in range(n):
        maxval = max(maxval, arr[i])
 
    return bs(arr, n, m, maxval * m)
 
# Driver Code
if __name__ == "__main__":
    arr = [1, 2, 3]
    n = len(arr)
    m = 11
    print(minTime(arr, n, m))
 
# This code is contributed by
# sanjeev2552

C#

// Efficient C# program to find
// minimum time required to
// produce m items.
using System;
 
public class GFG{
     
// Return the number of items can
// be produced in temp sec.
static int findItems(int []arr, int n,
                     int temp)
{
    int ans = 0;
    for (int i = 0; i < n; i++)
        ans += (temp / arr[i]);
    return ans;
}
 
// Binary search to find minimum time
// required to produce M items..
static int bs(int []arr, int n,
              int m, int high)
{
    int low = 1;
 
    // Doing binary search to
    // find minimum time.
    while (low < high)
    {
        // Finding the middle value.
        int mid = (low + high) >> 1;
 
        // Calculate number of items to
        // be produce in mid sec.
        int itm = findItems(arr, n, mid);
 
        // If items produce is less than
        // required, set low = mid + 1.
        if (itm < m)
            low = mid + 1;
 
        // Else set high = mid.
        else
            high = mid;
    }
 
    return high;
}
 
// Return the minimum time required to
// produce m items with given machine.
static int minTime(int []arr, int n,
                   int m)
{
    int maxval = int.MinValue;
 
    // Finding the maximum time in the array.
    for (int i = 0; i < n; i++)
        maxval = Math.Max(maxval, arr[i]);
 
    return bs(arr, n, m, maxval * m);
}
 
// Driver Code
static public void Main ()
{
    int []arr = {1, 2, 3};
    int n = arr.Length;
    int m = 11;
 
    Console.WriteLine(minTime(arr, n, m));
}
}
 
// This code is contributed by vt_m.

PHP

<?php
// Efficient PHP program to find minimum
// time required to produce m items.
 
// Return the number of items can be
// produced in temp sec.
function findItems( $arr, $n, $temp)
{
    $ans = 0;
    for($i = 0; $i < $n; $i++)
        $ans += ($temp / $arr[$i]);
    return $ans;
}
 
// Binary search to find minimum
// time required to produce M items.
function bs($arr, $n, $m, $high)
{
    $low = 1;
 
    // Doing binary search to
    // find minimum time.
    while ($low < $high)
    {
         
        // Finding the middle value.
        $mid = ($low + $high) >> 1;
 
        // Calculate number of items to
        // be produce in mid sec.
        $itm = findItems($arr, $n, $mid);
 
        // If items produce is less than
        // required, set low = mid + 1.
        if ($itm < $m)
            $low = $mid + 1;
 
        // Else set high = mid.
        else
            $high = $mid;
    }
 
    return $high;
}
 
// Return the minimum time required to
// produce m items with given machine.
function minTime($arr, $n, $m)
{
    $maxval = PHP_INT_MIN;
 
    // Finding the maximum
    // time in the array.
    for($i = 0; $i < $n; $i++)
        $maxval = max($maxval, $arr[$i]);
 
    return bs($arr, $n, $m, $maxval*$m);
}
 
    // Driver Code
    $arr = array(1, 2, 3);
    $n = count($arr);
    $m = 11;
 
    echo minTime($arr, $n, $m);
 
// This code is contributed by anuj_67.
?>

Javascript

<script>
// Efficient Javascript program to find
// minimum time required to
// produce m items.
 
// Return the number of items can
// be produced in temp sec.
function findItems(arr,n,temp)
{
    let ans = 0;
    for (let i = 0; i < n; i++)
        ans += Math.floor(temp / arr[i]);
    return ans;
}
 
// Binary search to find minimum time
// required to produce M items.
function bs(arr,n,m,high)
{
    let low = 1;
  
    // Doing binary search to
    // find minimum time.
    while (low < high)
    {
        // Finding the middle value.
        let mid = (low + high) >> 1;
  
        // Calculate number of items to
        // be produce in mid sec.
        let itm = findItems(arr, n, mid);
  
        // If items produce is less than
        // required, set low = mid + 1.
        if (itm < m)
            low = mid + 1;
  
        // Else set high = mid.
        else
            high = mid;
    }
  
    return high;
}
 
// Return the minimum time required to
// produce m items with given machine.
function minTime(arr,n,m)
{
    let maxval = Number.MIN_VALUE;
  
    // Finding the maximum time in the array.
    for (let i = 0; i < n; i++)
        maxval = Math.max(maxval, arr[i]);
  
    return bs(arr, n, m, maxval * m);
}
 
  
// Driven Program
let arr=[1, 2, 3];
let n = arr.length;
let m = 11;
document.write(minTime(arr, n, m));
     
 
// This code is contributed by patel2127
</script>

Producción:  

6

Este artículo es una contribución de Anuj Chauhan . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 

Publicación traducida automáticamente

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