uva 210 Concurrency Simulator

来源:互联网 发布:淘宝国庆中秋放假通知 编辑:程序博客网 时间:2024/06/07 18:51

题目:Concurrency Simulator


代码:

#include<cstdio>#include<iostream>#include<string>#include<cstring>#include<vector>#include<set>#include<map>#include<algorithm>#include<cmath>#include<queue>#include<deque>using namespace std;int n,q,t[6]= {0};vector<string> vec[1005];deque<int> que;queue<int> wait;int doit[1005]= {0};string value[26];bool state=0;void make(int head) {int Time=0;while(Time<q) {string x=vec[head][doit[head]];if(x[0]=='p'&&x[1]=='r') {Time+=t[2];printf("%d: ",head);cout<<value[x[x.size()-1]-'a']<<endl;} else if(x[0]=='l'&&x[1]=='o') {Time+=t[3];if(state==false) state=true;else {wait.push(head);return ;}} else if(x[0]=='u'&&x[1]=='n') {Time+=t[4];state=false;if(!wait.empty()) {que.push_front(wait.front());wait.pop();}} else if(x[0]=='e'&&x[1]=='n') {return ;} else {Time+=t[1];value[x[0]-'a']=x.substr(4,x.size()-4);}if(doit[head]==vec[head].size()-1) return ;doit[head]++;}que.push_back(head);return ;}void init() {n=0,q=0;memset(doit,0,sizeof(doit));for(int i=0; i<26; i++) value[i]="0";for(int i=1; i<1005; i++) vec[i].clear();que.clear();queue<int> tt;wait=tt;state=false;}int main() {int T;scanf("%d",&T);while(T--) {init();scanf("%d",&n);for(int i=1; i<=5; i++) {scanf("%d",&t[i]);}scanf("%d",&q);getchar();string a;for(int i=1; i<=n; i++) {while(getline(cin,a)&&a!="end") {vec[i].push_back(a);}vec[i].push_back("end");}for(int i=1; i<=n; i++) {que.push_back(i);}while(!que.empty()) {int head=que.front();que.pop_front();make(head);}if(T) printf("\n");}return 0;}


原创粉丝点击