• poj 2051.Argus 解题报告


    题目链接:http://poj.org/problem?id=2051

    题目意思:题目有点难理解,所以结合这幅图来说吧~~~~

      有一个叫Argus的系统,该系统支持一个 Register 命令,输入就是类似样例中的:

        Register 2004 200

        代表编号为 2004 的 Register,每隔 200 个时间单位就会产生一次。2005 同理。然后需要输出前 k 个事件。如果多个事件同时发生,就先输出编号较少的。所以在 600 这个时间上,2004 要比 2005 先输出。

        第一次学 rj 哥哥的优先队列,好神奇咯 ^___^

        

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <queue>
     5 using namespace std;
     6 
     7 struct node
     8 {
     9     int Q_num, Period;
    10     int Time;
    11     bool operator < (const node& a) const {
    12         return Time > a.Time || (Time == a.Time && Q_num > a.Q_num);   // 时间少的先输出或者时间相同时先输出编号小的
    13     }
    14 };
    15 
    16 int main()
    17 {
    18     #ifndef ONLINE_JUDGE           // 这段东西原来不能写在LA或者POJ上的!!否则会神奇地出现TLE(G++), MLE(C++)现象
    19         freopen("in.txt", "r", stdin);   // 用C++(220K 16ms)提交比G++(732K 47ms)快不少
    20     #endif // ONLINE_JUDGE
    21     
    22     char s[20];
    23     node tmp;
    24     priority_queue<node> pq;
    25     while (scanf("%s", s) && s[0] != '#') {
    26         scanf("%d%d", &tmp.Q_num, &tmp.Period);
    27         tmp.Time = tmp.Period;   // 周期,即每间隔Period的时间该事件会再次发生
    28         pq.push(tmp);
    29     }
    30 
    31     int K;
    32     scanf("%d", &K);
    33     while (K--) {
    34         tmp = pq.top();
    35         pq.pop();     
    36         printf("%d
    ", tmp.Q_num);
    37         tmp.Time += tmp.Period;  // 更新该事件下一次发生的时间
    38         pq.push(tmp);      // 重新插入优先队列进行优先级比较
    39     }
    40     return 0;
    41 }

         

  • 相关阅读:
    【题解】2020 年电子科技大学 ACMICPC 暑假前集训 数据结构
    【逆向】某触控板驱动分析过程
    SME 2019 ACM 题解
    数据结构 & 算法模板汇总
    VS2010win32下cocos2dx控制台打印的方法
    CDMA写码与鉴权(转载)
    mapxtreme开发小结2(c#)
    LONG GetWindowLong函数功能
    无边框的对话框的大小拖动实现
    YUV介绍
  • 原文地址:https://www.cnblogs.com/windysai/p/4289413.html
Copyright © 2020-2023  润新知