• 【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 }
  • 相关阅读:
    SSH移植
    ARM PPC 交叉编译环境搭建
    CEOI2020 作战记录&题解
    [NOI2019]序列 题解
    Atcoder Dwango Programming Contest 6th 题解
    CF516D Drazil and Morning Exercise 题解
    CF568E Longest Increasing Subsequence 题解
    [IOI2013]robots 题解
    SPOJ22549 DIVFACT4
    CF590E Birthday 题解
  • 原文地址:https://www.cnblogs.com/bombe1013/p/4127601.html
Copyright © 2020-2023  润新知