用到了 deque 和queue
操作说明:
queue qu: qu.push(x);
int d=qu.front();
qu.pop(); 和栈一样只有push和pop操作,front是看第一个! 栈里面是top
deque de: de.push_front(x);
de.push_back(x);
int x=de.front();
de.pop_front();
de.back_front();//push 和pop 加上后缀
检查了一个小时 发现是头文件有问题 :当使用bool时 不能用 include<bits/stdc++.h>
一开始题目理解错误 弄了好久 原来是一个程序一个程序往下!明明说的很清楚
一个模拟题 也不算太难 熟练使用queue和deque 的各种操作就好了
1. s == "end" string 类型可以直接这样判断
2、其中的 if(s == "") continue; 没收各种垃圾语句和字符
#includeusing namespace std;int val[26],t[6],Q,q[100];bool lock;deque de;queue zz;vector ans[10000];void run(int x);int main(){ int cas;cin>>cas; while(cas--) { int n; cin>>n; for(int i=0;i<5;i++) cin>>t[i]; cin>>Q;getchar(); for(int i=1;i<=n;i++) { ans[i].clear(); string s; while(getline(cin,s)) { if(s=="end")break; else ans[i].push_back(s); } de.push_back(i); } memset(q,0,sizeof(q)); memset(val,0,sizeof(val)); while(!de.empty())//通过队列里是否还有任务等待判定 { int x=de.front(); de.pop_front(); run(x); } } return 0;}void run(int x){ int v=0; int t1=Q; while(t1>0) { string aim=ans[x][ q[x] ];//每次都要读取命令 放在外面是错的 if(aim[2]=='=') { t1-=t[0]; v=aim[4]-'0';if(isdigit(aim[5]))v=v*10+aim[5]-'0'; val[ aim[0]-'a' ]=v; } else if(aim[0]=='p') { t1-=t[1]; printf("%d: %d\n",x,val[ aim[6]-'a' ]); } else if(aim[0]=='l') { t1-=t[2]; if(!lock) lock=!lock; else {zz.push(x);return ;} } else if(aim[0]=='u') { t1-=t[3]; if(lock) lock=!lock; if(!zz.empty())//题意! { int d=zz.front();zz.pop(); de.push_front(d); } } else return ; q[x]++;//放在上面自加是错误的 说明进入阻止队列时那次不算 } de.push_back(x);}