【HDOJ】1406 Ferry Loading III

模拟,注意需要比较队头与当前时间的大小关系。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 
 5 #define MAXN 10005
 6 #define INF 0xffffff
 7 
 8 typedef struct {
 9     int i, t;
10 } node_t;
11 
12 
13 node_t Q[2][MAXN];
14 int buf[MAXN];
15 int rear[2], front[2];
16 
17 int main() {
18     int case_n;
19     int n, t, m;
20     int i, j, k, a;
21     int d;
22     char s[7];
23 
24 #ifndef ONLINE_JUDGE
25     freopen("data.in", "r", stdin);
26     freopen("data.out", "w", stdout);
27 #endif
28 
29     scanf("%d", &case_n);
30     for (a=0; a<case_n; ++a) {
31         scanf("%d %d %d", &n, &t, &m);
32         rear[0] = rear[1] = 0;
33         front[0] = front[1] = 0;
34         for (i=1; i<=m; ++i) {
35             scanf("%d %s", &k, s);
36             if (s[0] == 'l')
37                 j = 0;
38             else
39                 j = 1;
40             Q[j][rear[j]].i = i;
41             Q[j][rear[j]].t = k;
42             rear[j]++;
43         }
44         Q[0][rear[0]].t = INF;
45         Q[1][rear[1]].t = INF;
46         d = 0;
47         int ans = 0;
48         while (front[0]<rear[0] || front[1]<rear[1]) {
49             if (Q[d][front[d]].t>ans && Q[!d][front[!d]].t<=ans) {
50                 ans += t;
51                 d = !d;
52             } else if ((Q[d][front[d]].t>Q[!d][front[!d]].t || front[d]>=rear[d]) && Q[!d][front[!d]].t>ans) {
53                 ans = Q[!d][front[!d]].t + t;
54                 d = !d;
55             }
56             if (ans < Q[d][front[d]].t)
57                 ans = Q[d][front[d]].t;
58             j = 0;
59             i = front[d];
60             while (j<n && i<rear[d] && Q[d][i].t<=ans) {
61                 buf[Q[d][i].i] = ans + t;
62                 ++j;
63                 ++i;
64             }
65             ans += t;
66             front[d] = i;
67             d = !d;
68         }
69         if (a)
70             printf("
");
71         for (i=1; i<=m; ++i)
72             printf("%d
", buf[i]);
73     }
74 
75     return 0;
76 }
原文地址:https://www.cnblogs.com/bombe1013/p/4127601.html