一个较难得模拟题
用到了 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;//???
#include<bits/stdc++.h> #include<iostream> #include<string> #include<string.h> #include<cstdio> #include<deque> #include<vector> #include<queue> using namespace std; int q[1000]={0}; int val[26]={0}; bool lock; int n,t[6],Q; vector<string>ss[1000]; deque<int>de;//总队列 queue<int>qu;//阻止队列 void run(int x) { string aim; int t1=Q;int v; while(t1>0) { aim=ss[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) { qu.push(x); return ; } else lock=true; } else if(aim[0]==‘u‘) { lock=false; t1-=t[3]; if(!qu.empty()){ int d=qu.front(); qu.pop(); de.push_front(d);} } else return ; q[x]++; } de.push_back(x); } int main() { int cas; cin>>cas; while(cas--) { cin>>n; for(int i=0;i<5;i++) cin>>t[i]; cin>>Q; string s; for(int i=1;i<=n;i++) { ss[i].clear(); de.push_back(i); while( 1 ) {getline(cin,s); if(s == "") continue;//??? ss[i].push_back(s); if(s == "end") break; } } memset(q,0,sizeof(q)); memset(val,0,sizeof(val)); while(!de.empty()) { int x=de.front(); de.pop_front(); run(x); } if(cas) printf("\n"); } return 0; }
原文地址:https://www.cnblogs.com/bxd123/p/10285548.html
时间: 2024-10-26 01:26:24