#include using namespace std; struct Time { int hour,minute; }; struct Node { string name; int room, bed; int top,tbk; int sop,sbk; }; typedef pair P; typedef pair Q; const int INF=100000000; vector

rooms,beds; priority_queue,greater> patient; vector names; map IDcache; int n,m,T,t1,t2,t3,cnt; int tot_time; int used[45]; inline void clear() { memset(used, 0, sizeof(used)); names.clear(); IDcache.clear(); rooms.clear(); beds.clear(); while(!patient.empty()) patient.pop(); } Time std_time(int m) { int hour=m/60; int minute=m%60; Time u={hour+T,minute}; return u; } void print() { puts(" Patient Operating Room Recovery Room"); puts(" # Name Room# Begin End Bed# Begin End"); puts(" ------------------------------------------------------"); for(int i=0;i0) rate = (double)used[i] * 100 / tot_time; printf("Room %2d %7d %7.2lf\n", i + 1, used[i], rate); } for(int i=0;i 0) rate = (double)100 * used[i + n] / tot_time; printf("Bed %2d %7d %7.2lf\n", i + 1, used[n + i], rate); } } int main() { #ifdef local freopen("pro.in","r",stdin); #endif while(scanf("%d%d%d%d%d%d%d", &n, &m, &T, &t1, &t2, &t3, &cnt)==7) { clear(); tot_time=0; for(int i=0;i>s>>top>>tbk; Node u={s,0,0,top,tbk,0,0}; names.push_back(u); } int count = -1; for(int i=0;i, greater >tl1; vector tmp;//ÔÝʱ´æ·Åÿλ²¡È˽øÈë»Ö¸´ÊÒµÄʱ¼ä for(int i=0;i::iterator it = rooms.begin(); for (it; it->first != now; it++);//ÕÒ±àºÅ×îСµÄ¿ÉÓÃÊÖÊõÊÒ int id = it->second;//ÊÖÊõÊÒ±àºÅ Node&person = names[count]; person.sop = now; person.room = id; used[id] += person.top; int Next = now + person.top + t2;//¸ÃÊÖÊõÊÒÏÂÒ»´Î¿ÉÒÔ±»Ê¹ÓõÄʱ¿Ì it->first = Next; person.sbk = Next - t2 + t1;//×ªÒÆµ½»Ö¸´ÊÒµÄʱ¼ä patient.push(Q(P(person.sbk, id),count));//»ñµÃ½øÈë»Ö¸´ÊҵĶÓÁУ¬Ö÷ÒªÒÀ¾ÝsbkÀ´ÅŶÓ,´ÎÒªÒÀ¾ÝÊÖÊõÊÒ±àºÅÅÅÐò tl1.push(Next); } for(int i=0;i::iterator it = beds.begin(); for (it; it->first > now; it++);//²éÕÒ±àºÅ×îСµÄ¿ÉÓûָ´ÊÒ int id = it->second;//»Ö¸´ÊÒ±àºÅ Node&person = names[u.second]; person.bed = id; used[id + n] += person.tbk; int Next = person.sbk + person.tbk + t3;//ÏÂÒ»´Î¿ÉÒÔ±»Ê¹ÓõÄʱ¿Ì tot_time = max(tot_time, person.sbk + person.tbk); it->first = Next; } print(); cout<