zoukankan      html  css  js  c++  java
  • 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 }

         

  • 相关阅读:
    动手动脑及类的创建
    动手动脑-Java重载
    方法的动手动脑
    文本单词数测试
    动手动脑
    springmvc使用fastjson
    springmvc之发送json数据自动转Java对象接收
    springmvc之拦截器
    基于xml配置springmvc案例
    springmvc之异常处理
  • 原文地址:https://www.cnblogs.com/windysai/p/4289413.html
Copyright © 2011-2022 走看看