blob: d037fe045c8e42560cfd71ef6066ab5c202ade40 (
plain)
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
|
#include <iostream>
using namespace std;
int main() {
int groupsA, groupsB; // Grupos totales de cada vector
int iA, iB; // Índices para iterar por los vectores de grupos y valores
double step, total; // Cuántos valores van a sumarse en un solo paso y suma total
cout.precision(0);
while (cin >> groupsA && !cin.eof()) {
cin >> groupsB;
int lengthsA[groupsA], valuesA[groupsA]; // Tamaño de cada grupo y su valor
for (int a = 0; a < groupsA; a++) {
cin >> lengthsA[a];
cin >> valuesA[a];
}
int lengthsB[groupsB], valuesB[groupsB];
for (int b = 0; b < groupsB; b++) {
cin >> lengthsB[b];
cin >> valuesB[b];
}
iA = 0;
iB = 0;
total = 0;
while (iA < groupsA) { // Hasta que se computen todos los grupos de A (A y B igual de largos)
// Computa a la vez tantas parejas iguales como se pueda (step)
step = min(lengthsA[iA], lengthsB[iB]);
total += step * valuesA[iA] * valuesB[iB];
// Descuenta los valores computados de la longitud de cada grupo (al menos uno se vuelve cero)
lengthsA[iA] -= step;
lengthsB[iB] -= step;
// Cuando la longitud de un grupo es cero, empieza a considerar el siguiente grupo
if (!lengthsA[iA])
iA++;
if (!lengthsB[iB])
iB++;
}
cout << fixed << total << endl;
}
}
|