【学习笔记】〖九度OJ〗标题1326:Waiting in Line
【学习笔记】〖九度OJ〗题目1326:Waiting in Line
题目1326:Waiting in Line
本题在浙大PAT上有同样的题目,但两个OJ对题目的解读并不同,区别在于对
“for those customers who cannot be served before 17:00, you must output
‘Sorry’ instead.”这句话的理解。
九度要求对于17点之前未处理完成的,一律为sorry。
浙大PAT上要求17:00之前如果开始处理,那么要给出处理完的时间。而对于还在排队
的,均为sorry。
下面是浙大PAT上AC的代码,九度上只需要稍微改动一下,大体思想相同,感觉类似CPU调度时的时间片轮转算法,
排队就是简单的FIFO。
#include<iostream> #include<cstdio> using namespace std; class Lineitem { public: int trans; int no; }; Lineitem line[22][12]; int cus[1002]; int res[1002]; int main() { freopen("input.in", "r", stdin); freopen("output.out","w", stdout); int n, m, k, q, i, j; int cusP = 0,time=0; cin >> n >> m >> k >> q; for (i=0; i<k; i++) { cin >> cus[i]; } //队伍排满 for (j=0; j<m; j++) { for (i=0; i<n; i++) { if (cusP>=k)//队伍无人 { line[i][j].no = -1; line[i][j].trans = 0; } else { line[i][j].no = cusP; line[i][j].trans = cus[cusP++]; } } } for (time=1; time<540; time++) { for (i=0; i<n; i++) { //本队无客户,去下一队 if (line[i][0].no == -1) { continue; } line[i][0].trans--;//每个窗口同步服务当前客户 //客户服务完毕,下一客户进队 if (line[i][0].trans == 0) { res[line[i][0].no] = time;//记录当前客户完成时间 //依次前移 for (j=0; j<m-1; j++) { line[i][j] = line[i][j+1]; } //新客户入队 if (cusP<k) { line[i][j].no = cusP; line[i][j].trans = cus[cusP++]; } else { //无新客户 line[i][j].no = -1; line[i][j].trans = 0; } } }//end of for i }//end of for time //时间到,还在处理的处理完 for (i=0; i<n; i++) { if (line[i][0].no != -1) { res[line[i][0].no] = time+line[i][0].trans-1; } } //还在队内sorry for (i=0; i<n; i++) { for (j=1; j<m; j++) { if (line[i][j].no==-1) { break; } res[line[i][j].no] = -1; } }//*/ //还在黄线外sorry while (cusP<k) { res[cusP++] = -1; } int index; for (i=0; i<q; i++) { cin >> index; index--; if (res[index] == -1||n==0||m==0) { printf("Sorry\n"); } else { printf ("%02d:%02d\n", res[index]/60+8, res[index]%60); } } return 0; }