标签:des style http os io ar for art cti
Description
All the members of ICORE have been convinced that the schedule of the checkups has been professionally prepared and that there would be no lining up and waiting at the doctors‘ doors. However, since their boss was a political appointment their hopes for not wasting time had to be abandoned as soon as they started arriving at the hospital. The queues were forming rapidly despite the fact that the doctors were very efficient due to their usual sloppiness. The members of ICORE are all very disciplined and obey the following rules for visiting the doctors
Your task is to find the time when the last visitor leaves the hospital.
The first line of input contains a natural number c giving the number of cases to handle. The following lines form the input for the c cases, each in the format described below. The first line of data for a case contains two natural numbers n and m, 1 ≤ n, m ≤ 1000, giving the number of the visitors and the number of doctors‘ offices for the case. Each of the following n lines contains a sequence of natural numbers. Among these lines, line i (1 ≤ i ≤ n) has the following format
For each of the c input cases print one line giving the time when the last visitor leaves the hospital.
2 5 3 1 3 3 2 1 0 7 2 3 1 1 1 1 2 2 1 1 1 2 3 3 4 3 1 1 1 5 10 3 1 6 2 3 3 2 8 2 1 4 2 4 7 9 9 6 0 2 8 7
12 6 题意:某公司要求每个员工都必须到当地的医院体检,并给每个员工安排了体检的顺序。为了节约等待时间,员工们被要求分时段去体检,但排队仍然是必不可少的。因此,公司制定了下面几条规定:
已经知道每个医生在每单位1的时间内可以检查一个员工,给定所有员工的体检时间和体检顺序,请计算一下最后一个员工离开医院的时间。
一共有N(1 ≤ N ≤ 1000)个员工,M(1 ≤ M ≤ 1000)个医生,所有人总的检查次数不超过1000000次。
思路:每个项目都用一个优先队列模拟,处理一个人后,就将这个人丢到它的下一项目对应的队列中#include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <algorithm> using namespace std; const int maxn = 1100; struct node { int t, id; bool operator <(const node &a) const { if (t == a.t) return id > a.id; return t > a.t; } }; int n, m; priority_queue<node> p[maxn]; queue<int> q[maxn]; int main() { int t; scanf("%d", &t); while (t--) { scanf("%d%d", &n, &m); int x, num, a; node now; for (int i = 0; i < n; i++) { now.id = i; scanf("%d%d", &x, &num); while (num--) { scanf("%d", &a); a--; q[i].push(a); } now.t = x; p[q[i].front()].push(now); } int ans = 0, flag = 1; while (flag) { flag = 0; for (int i = 0; i < m; i++) { if (!p[i].empty()) { flag = 1; now = p[i].top(); if (now.t > ans) continue; p[i].pop(); q[now.id].pop(); if (!q[now.id].empty()) { now.t = ans + 1; p[q[now.id].front()].push(now); } } } ans++; } printf("%d\n", ans-1); } return 0; }
UVA - 10588 Queuing at the doctors (队列)
标签:des style http os io ar for art cti
原文地址:http://blog.csdn.net/u011345136/article/details/39103617