#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define db(a) cout << #a << " = " << a << endl;
#define foreach(it,l) for (typeof(l.begin()) it = l.begin(); it != l.end(); it++)
using namespace std;
int main() {
int c, n, t, m, val, kr = 0, kl = 0, cap = 0, time = 0, cont = 0;
char direccion[20];
scanf("%d", &c);
for (int k = 0; k < c; k++) {
queue<int> left, right;
scanf("%d %d %d", &n, &t, &m);
kr = kl = 0;
vector<int> posiciones(m);
cont = 0;
for (int i = 0; i < m; i++) {
scanf("%d %s", &val, direccion);
if(strcmp(direccion,"left") == 0)
left.push(val), kl++,posiciones[cont++] = 0;
else
right.push(val), kr++,posiciones[cont++] = 1;
}
vector<int> listaL(kl), listaR(kr);
kl = kr = cap = time = 0;
string ini = "left";
while (!left.empty() || !right.empty()) {
if (!left.empty() && !right.empty()) {
if(left.front() > time && right.front() > time) {
if(left.front() > right.front()) {
time += right.front() - time;
if(ini == "left") time += t;
ini = "right";
}
else {
time += left.front() - time;
if(ini == "right") time += t;
ini = "left";
}
}
}
else {
if (left.empty()) {
if (right.front() > time) {
time += right.front() - time;
if(ini == "left") time += t;
ini = "right";
}
}
else {
if (left.front() > time) {
time += left.front() - time;
if(ini == "right") time += t;
ini = "left";
}
}
}
if (ini == "left") {
cap = 0;
while (cap < n && !left.empty() && left.front() <= time) {
//printf("left %d\n", time + t);
listaL[kl++] = time + t;
left.pop();
cap++;
}
time += t;
ini = "right";
}
else {
cap = 0;
while (cap < n && !right.empty() && right.front() <= time) {
//printf("right %d\n", time + t);
listaR[kr++] = time + t;
right.pop();
cap++;
}
time += t;
ini = "left";
}
}
kl = kr = 0;
for (int i = 0; i < m; i++) {
if (!posiciones[i])
printf("%d\n", listaL[kl++]);
else
printf("%d\n", listaR[kr++]);
}
if(k + 1 != c) printf("\n");
}
return 0;
}
lunes, 24 de octubre de 2011
10901 - Ferry Loading III - UVA
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario