1017 Queueing at Bank - 優先佇列+模擬
阿新 • • 發佈:2018-12-06
題意:
有n個人k個視窗,每個視窗服務一個人,顧客按到來的先後順序排隊,當視窗沒人的時候,就過去,問平均等待時間
思路:
這種時間題肯定要先轉為秒,這樣好算啦
然後顧客要是在8點之前到的話要等待
程式碼如下:
#include<iostream> #include<cstdio> #include<algorithm> #include<string> #include<cstring> #include<set> #include<queue> using namespace std; const int N=10006; priority_queue<int,vector<int>,greater<int> >qqq; struct A{ int tim; int pro; }cus[N]; bool cmp(A a,A b){ return a.tim<b.tim; } int main(){ int n,k,p,siz=0; int a,b,c; scanf("%d%d",&n,&k); for(int i=0;i<n;i++){ scanf("%d:%d:%d%d",&a,&b,&c,&p); int tmp=a*3600+b*60+c; if(tmp>61200)continue; cus[siz].tim=tmp; cus[siz++].pro=p; } sort(cus,cus+siz,cmp); for(int i=1;i<=k;i++){ qqq.push(28800); } double ans=0; for(int i=0;i<siz;i++){ int tt=qqq.top(); qqq.pop(); if(cus[i].tim<tt){//顧客先到達 ans+=tt-cus[i].tim; qqq.push(tt+cus[i].pro*60); } else qqq.push(cus[i].tim+cus[i].pro*60); } ans/=siz; ans/=60; printf("%.1f\n",ans); }