-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCajeros.cpp
67 lines (65 loc) · 1.67 KB
/
Cajeros.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/* Enunciado
*
* Se tiene una fila de personas con un carrito de compras. Las personas quieren pagas sus compras
* cada persona tiene un tiempo `t` para ser atendidos por un cajero. Existen tres cajeros.
* ¿Quieres saber cuanto es el tiempo mínimo para que todas las personas puedan pagar sus compras?
*
* Ejemplo:
* p1 se demora 3 segundos
* p2 se demora 5 segundos
* p3 se demora 4 segundos
* p4 se demora 2 segundos
* p5 se demora 2 segundos
* p6 se demora 1 segundos
*
* La respuesta sería: 6 segundos el tiempo en atender todos
*
* Solución:
* Como los tres cajeros están libres, mandaremos a las tres primeras personas en la fila a cada
* cajero. Luego, la siguiente persona será el que tenga el cajero con menor tiempo acumulado.
*
* Por ejemplo:
* C1 = p1
* C2 = p2
* C3 = p3
*
* Luego, como p1 es menor que todos entonces p4 lo mandamos al cajero C1
*
* Dando,
* C1 = p1 + p4
* C2 = p2
* C3 = p3
*
* Luego, p5 lo mandamos al cajero C3
*
* Dando,
* C1 = p1 + p4
* C2 = p2
* C3 = p3 + p5
*
* Finalmente, p6 podría ser enviado tanto al cajero C1 como C2
*
* Dando
* C1 = p1 + p4
* C2 = p2 + p6
* C3 = p3 + p5
*
* Por lo tanto el tiempo mínimo es la suma máxima
*/
int tiempo_minimo(Queue personas) {
// estado inicial de los cajeros
int C1 = 0;
int C2 = 0;
int C3 = 0;
while(personas.size() > 0) {
if(C1 < C2 && C1 < C3) {
C1 += personas.front();
} else if(C2 < C1 && C2 < C3) {
C2 += personas.front();
} else {
C3 += personas.front();
}
personas.dequeue();
}
return max(C1, max(C2, C3));
}