开始和结束,蚂蚁的顺序不变。
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cctype>
#include <cstdlib>
#include <iostream>
using namespace std;
struct P {
int id, p, v;
}before[10010], after[10010];
bool cmp (P a, P b) {
return a.p < b.p;
}
int order[10010];
int main() {
int L, T, n, t, now = 0;
scanf("%d", &t);
while (t --) {
scanf("%d%d%d", &L, &T, &n);
for (int i = 0; i < n; ++ i) {
char c;
before[i].id = i;
scanf("%d %c", &before[i].p, &c);
if (c == 'R') before[i].v = after[i].v = 1;
else before[i].v = after[i].v = -1;
after[i].p = before[i].p + before[i].v * T;
}
sort(before, before + n, cmp);
for (int i = 0; i < n; ++ i)
order[before[i].id] = i;
sort(after, after + n, cmp);
for (int i = 0; i < n - 1; ++ i) if (after[i].p == after[i + 1].p) {
after[i].v = after[i + 1].v = 0;
}
printf("Case #%d:\n", ++ now);
for (int i = 0; i < n; ++ i) {
int a = order[i];
if (after[a].p > L || after[a].p < 0) puts("Fell off");
else {
printf("%d ", after[a].p);
if (after[a].v == 0) puts("Turning");
else printf("%c\n", after[a].v > 0 ? 'R' : 'L');
}
}
puts("");
}
}