第一次写的node
#include<stdio.h> #include<queue> #include<string.h> #include<algorithm> using namespace std; struct node { int id; int time; int end_time; }cut[1005]; queue<int> Q[25]; int Q_curtime[25];//window endtime int qur_id[1005]; void transaction(int n,int m,int k) { int Nm=n*m; memset(Q_curtime,0,sizeof(Q_curtime)); int i; for(i=0;i<Nm&&i<k;i++){ Q[i%n].push(i); } for(;i<k;i++){ Q[n].push(i); } int havedelCut=0; while(havedelCut<k){ int min_time=123456789,min_id=0,id;// for(int i=0;i<n;i++){ if(!Q[i].empty()){ id=Q[i].front(); if(cut[id].time+Q_curtime[i]<min_time){ min_id=i; min_time=cut[id].time+Q_curtime[i]; } } } id=Q[min_id].front(); Q_curtime[min_id]+=cut[id].time; cut[id].end_time=Q_curtime[min_id]; Q[min_id].pop(); ++havedelCut; if(Q[min_id].size()<m){//customer less m if(!Q[n].empty()){ Q[min_id].push(Q[n].front()); Q[n].pop(); } } } } int main() { int n,m,k,q; scanf("%d %d %d %d",&n,&m,&k,&q); for(int i=0;i<k;i++){ scanf("%d",&cut[i].time); } for(int i=0;i<q;i++){ scanf("%d",&qur_id[i]); } transaction(n,m,k); for(int i=0;i<q;i++){ int endtime=cut[qur_id[i]-1].end_time; if(endtime-cut[qur_id[i]-1].time<540) printf("%02d:%02d\n",8+endtime/60,endtime%60); else printf("Sorry\n"); } return 0; }
参考别人代码有改进的less
#include<stdio.h> #include<queue> #include<string.h> #include<algorithm> using namespace std; #define INF 0x6fffffff struct node { int time; int end_time; }cut[1005];//customer queue<int> Q[25];//window queue int Q_curtime[25];//window endtime void transaction(int n,int m,int k) { int Nm=n*m; memset(Q_curtime,0,sizeof(Q_curtime)); int i; for(i=0;i<Nm && i<k;i++) { cut[i].end_time=Q_curtime[i%n]+cut[i].time; Q_curtime[i%n]=cut[i].end_time; Q[i%n].push(i); } for(;i<k;i++) { int mmin = INF; int id=-1; for(int j=0;j<n;j++){ int topid=Q[j].front(); if(mmin>cut[topid].end_time) { id=j; mmin=cut[topid].end_time; } } Q[id].pop(); cut[i].end_time=Q_curtime[id]+cut[i].time; Q_curtime[id]=cut[i].end_time; Q[id].push(i); } } int main() { int n,m,k,q; scanf("%d %d %d %d",&n,&m,&k,&q); for(int i=0;i<k;i++){ scanf("%d",&cut[i].time); cut[i].end_time=INF; } transaction(n,m,k); for(int i=0;i<q;i++){ int id; scanf("%d",&id);id--; int endtime=cut[id].end_time; if(endtime-cut[id].time<540)//attention servertime printf("%02d:%02d\n",8+endtime/60,endtime%60); else printf("Sorry\n"); } return 0; }