代码:
#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;
}