UVA 1203 - Argus
题意:给定一些注冊命令。表示每隔时间t,运行一次编号num的指令。注冊命令结束后。给定k。输出前k个运行顺序
思路:用优先队列去搞,任务时间作为优先级。每次一个任务出队后,在把它下次运行作为一个新任务入队就可以
代码:
#include <cstdio> #include <cstring> #include <queue> using namespace std; char str[10]; struct Task { int t, q, p; Task(){} Task(int t, int q, int p) { this->t = t; this->q = q; this->p = p; } bool operator < (const Task& a) const { if (t != a.t) return t > a.t; return q > a.q; } }; priority_queue<Task> Q; int main() { int a, b; while (~scanf("%s", str) && str[0] != '#') { scanf("%d%d", &a, &b); Q.push(Task(b, a, b)); } int k; scanf("%d", &k); while (k--) { Task now = Q.top(); Q.pop(); printf("%d ", now.q); now.t += now.p; Q.push(now); } return 0; }