Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
参考《数据结构编程实验》 吴永辉#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn = 10000 + 10; int cnt[maxn]; //耗费为k的进程数 bool print[maxn]; int main() { //freopen("manager.in","r",stdin); //freopen("manager.out","w",stdout); int minp = 1; //进程的最小耗费值 int maxp; //进程的最大耗费值 int plen; //删除的进程数 int condition;//管理者的删除策略 while(cin >> maxp) //整个输入以测试数据组的首个整数为0(maxp==0)为止 { condition = 1; //管理者的删除策略默认为1 memset(print,false,sizeof(print)); memset(cnt,0,sizeof(cnt)); cin >> plen; int x; for(int i = 1; i <= plen; i++) //将删除列表中的进程标志设为true { cin >> x; print[x] = true; } getchar(); //跳过删除列表后的换行符 int np = 0; //当前被删除的进程数设为0 char req; //命令类型 while(cin >> req && req != 'e') //输入请求类别 { if(req == 'a') { cin >> x; //读进程的花费;相同耗费进程不止一个 cnt[x]++; } else if(req == 'r') { bool flag = true; //假设队列为空 if(condition == 1) //删除最小耗费 { for(int k = minp; k <= maxp; k++) { if(cnt[k] != 0) { cnt[k]--; np++; //累计被删除的进程 if(print[np] == true) cout << k << endl; //该进程在被删计划之列 flag = false; break; } } } else if(condition == 2) //删除最大耗费 { for(int k = maxp; k >= minp; k--) { if(cnt[k] != 0) { cnt[k]--; np++; //累计被删除的进程 if(print[np] == true) cout << k << endl; //该进程在被删计划之列 flag = false; break; } } } if(flag) cout << "-1" << endl; //队列为空,输出-1 } else if(req == 'p') { cin >> condition; } } cout << endl; //用空行输出不同测试用例的结果 } //fclose(stdin); //fclose(stdout); return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator