zoukankan      html  css  js  c++  java
  • uvalive 3135 Argus

    https://vjudge.net/problem/UVALive-3135

    题意:

    有一个系统有多个指令,每个指令产生一个编号为qnum的时间,每个指令的触发间隔不相同,现在给出若干个指令,现在的任务是模拟前k个事件。

    如果时间在同一时间发生,那么qnum小的先输出。

    思路:

    很多相同的数值在同一时刻内,数值小的先输出,那么就是求若干个中最小的,那么就可以用优先队列进行维护。

    这里,因为时间范围较小,之后每个事件的时间取余,那么符合的就把一个结构体扔进优先队列,这个结构体包括了qnum,period以及time。

    我们重载 < 的时候,发生时间相同的话,把qnum小的优先级调高,时间不同的话,时间在前的优先级高。

    代码:

     1 #include <string>
     2 #include <iostream>
     3 #include <queue>
     4 using namespace std;
     5 
     6 struct node
     7 {
     8     int num;
     9     int pe;
    10     int ti;
    11 
    12     bool operator < (const node& rhs) const
    13     {
    14         if (ti == rhs.ti) return num > rhs.num;
    15         return ti > rhs.ti;
    16     }
    17 } a[1005];
    18 
    19 priority_queue<node> pq;
    20 
    21 int main()
    22 {
    23     int cnt = 0;
    24 
    25     string b;
    26 
    27     while (cin >> b)
    28     {
    29         if (b[0] == '#') break;
    30 
    31         cin >> a[cnt].num >> a[cnt].pe;
    32 
    33         cnt++;
    34     }
    35 
    36     int k;
    37 
    38     cin >> k;
    39 
    40     for (int i = 1;i <= 3000;i++)
    41     {
    42         for (int j = 0;j < cnt;j++)
    43         {
    44             if (i % a[j].pe == 0)
    45             {
    46                 node tmp = (node){a[j].num,a[j].pe,i};
    47 
    48                 pq.push(tmp);
    49             }
    50         }
    51     }
    52 
    53     for (int i = 0;i < k;i++)
    54     {
    55         node tmp = pq.top();pq.pop();
    56 
    57         cout << tmp.num << endl;
    58     }
    59 
    60     return 0;
    61 }
  • 相关阅读:
    springcloud2.0 添加配置中心遇到的坑
    redis 字符串和集合操作
    Linux
    流畅的python 符合python风格的对象
    流畅的python 对象引用 可变性和垃圾回收
    流畅的python 闭包
    流畅的python 使用一等函数实现设计模式
    互联网协议入门
    流畅的python 字典和集合
    流畅的python python数据模型
  • 原文地址:https://www.cnblogs.com/kickit/p/7643389.html
Copyright © 2011-2022 走看看