1014. Waiting in Line (30)

    xiaoxiao2021-03-25  34

    转载: http://www.seven.moe/?p=165

    //题目要点:进入黄线前是一个队列 //进入黄线后,每个窗口前面都是一个队列 //客户进入黄线后,不论别的队列发生了什么,均不得再改变队列

    /* pat官网是用的C++11标准,但VC++6.0不支持。所以,最好使用VS2015里的插件:代码一键发布GitHub 在VS2015中,需要添加宏定义来屏蔽4996Error: #pragma warning(disable:4996) 目的:在ACM中进行快速输入 用法:freopen("input.txt",r,stdin); 其中input.txt文件位置放在和源.cpp文件在同一个文件夹下 system("pause") 在VS2015中,如果不加这一行代码,程序会直接结束,没有按任意键继续 这一句话。所以你想要看到结果,你就得加上这句话。 提交到pat官网:注释掉这三个: #pragma warning(disable:4996) freopen("input.txt",r,stdin); system("pause"); */ #include<iostream> #include<queue> #include<algorithm> //LeaveTime/60 //#pragma warning(disable:4996) using namespace std; struct node{ int FirstTime; int LastTime; queue<int> WaitList; }; struct{ int NeedTime; int WaitTime; }Customer[10001]; int main(){ //freopen("input.txt","r",stdin); int n,m,k,q; int queryxuhao[1001]={0}; for(int i=1;i<=10000;i++){//顾客从1开始 Customer[i].NeedTime=0; Customer[i].WaitTime=0; } vector<node> Window(21); for(i=0;i<20;i++){//窗口从0开始 Window[i].FirstTime=0; Window[i].LastTime=0; } cin>>n>>m>>k>>q; for(i=1;i<=k;i++) cin>>Customer[i].NeedTime; for(i=0;i<q;i++) cin>>queryxuhao[i]; int InsideNum=n*m,WaitNum=k-n*m; //黄线内 for(i=0;i<InsideNum;i++){ Window[i%n].WaitList.push(i+1); Customer[i+1].WaitTime=Window[i%n].LastTime; Window[i%n].LastTime+=Customer[i+1].NeedTime; } for(i=0;i<n;i++){ Window[i].FirstTime+=Customer[Window[i].WaitList.front()].NeedTime; Window[i].WaitList.pop(); } //黄线外 for(i=0;i<WaitNum;i++){ int flag=-1;int min=999999;//初始设为无穷大 for(int j=0;j<n;j++){ if(Window[j].FirstTime<min){ min=Window[j].FirstTime; flag=j; } } Window[flag].FirstTime+=Customer[Window[flag].WaitList.front()].NeedTime; Window[flag].WaitList.pop(); Window[flag].WaitList.push(n*m+i+1); Customer[n*m+i+1].WaitTime=Window[flag].LastTime; Window[flag].LastTime+=Customer[n*m+i+1].NeedTime; } for(i=0;i<q;i++){ int LeaveTime=Customer[queryxuhao[i]].WaitTime+Customer[queryxuhao[i]].NeedTime; if(Customer[queryxuhao[i]].WaitTime>=540){ //本题容易出错的地方:是在17:00及以后开始服务的客户输出"Sorry",而不是17:00之前结束服务的输出"Sorry"; //如客户cId是16:59开始服务,服务时间为2,则输出的应该是17:01,而不是"Sorry"。 cout<<"Sorry"<<endl; }else{ int hour=8+LeaveTime/60; int minute=LeaveTime%60; if(hour<10) cout<<"0"<<hour<<":"; else cout<<hour<<":"; if(minute<10) cout<<"0"<<minute<<endl; else cout<<minute<<endl; } } //system(pause); return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-200044.html

    最新回复(0)