#include<iostream>
#include<cstdio>
#include<queue>
#include<sstream>
using namespace std;
struct Program{
int n;//编号
queue<string> code;
};
const int maxn=2005;
Program program[maxn];
Program wait[maxn];//等待队列
Program block[maxn];//阻塞队列
int wait_front=0,wait_rear=0;//等待队列首尾
int block_front=0,block_rear=0;//阻塞队列首尾
int var[30];//变量
int main(){
int T;
cin>>T;
while(T--){
int n,t1,t2,t3,t4,t5,q;
int toTime[200];
bool isLock=false;
cin>>n>>t1>>t2>>t3>>t4>>t5>>q;
getchar();
toTime['=']=t1;
toTime['i']=t2;
toTime['c']=t3;
toTime['l']=t4;
toTime['d']=t5;
//用字符串中的第三个字符作为下标来处理
for(int i=1;i<=n;i++){
string s;
program[i].n=i;
while(1){
getline(cin,s);
//cout<<"test:"<<s<<endl;
program[i].code.push(s);
if(s=="end") break;
}
//cout<<program[i].n<<" NUM:"<<program[i].code.size()<<endl;
wait[wait_rear]=program[i];//第i个程序进入等待队列 入队
wait_rear++;
}
while(wait_rear!=wait_front){
Program now=wait[wait_front];//等待队列队首出队
wait_front++;//出队
int time=q;
while(!now.code.empty()){//code没有执行完
string s=now.code.front();//当前语句
if(time<=0){
wait[wait_rear]=now;//等待队列入队
wait_rear++;
break;
}
if(s[2]=='c'){//如果当前是lock语句
if(isLock){
block[block_rear]=now;
block_rear++;//已经锁住,进入阻塞队列
break;
}else{
isLock=true;
}
}
if(s[2]=='l'){//当前是unlock
isLock=false;
//阻止队列的第一个程序进入等待队列的首部
if(block_rear!=block_front){//阻塞队列不为空
Program now1=block[block_front];
block_front++;//block队首出队
wait_front--;
wait[wait_front]=now1;//插入到wait队首
}
}
if(s[2]=='='){//当前为赋值语句
char c;
string t;
int num;
stringstream ss(s);
ss>>c>>t>>num;
//cout<<"test:"<<c<<' '<<t<<' '<<num<<endl;
var[c-'a']=num;//变量赋值
}
if(s[2]=='i'){//当前为输出语句
cout<<now.n<<":"<<var[s[6]-'a']<<endl;
}
time-=toTime[s[2]];
now.code.pop();
if(s[2]=='d'){//当前为end语句
break;
}
}
}
if(T) cout<<endl;
}
}
不知道为什么总是RE 有哪位大神知道吗