UVa 210 - Concurrency Simulator(模拟+双端队列)
2015-02-08 15:34
471 查看
模拟执行各种指令,很久之前的一道例题,书上给出了思路。
使用双端队列储存程序,根据相应的指令对队列进行调整。
使用双端队列储存程序,根据相应的指令对队列进行调整。
#include<cstdio> #include<cstring> #include<cctype> #include<queue> using namespace std; const int maxn=1010; bool locked; char pro[maxn][10]; int n,tq,c[5],var[26],ip[maxn]; deque<int> ready; queue<int> block; void run(int pid){ int q=tq; while(q>0){ char *p=pro[ip[pid]]; switch(p[2]){ case '=': var[p[0]-'a']=isdigit(p[5])?(p[4]-'0')*10+p[5]-'0':p[4]-'0'; q-=c[0]; break; case 'i': printf("%d: %d\n",pid+1,var[p[6]-'a']); q-=c[1]; break; case 'c': if(locked){block.push(pid);return;} locked=true; q-=c[2]; break; case 'l': locked=false; if(!block.empty()){ int pid2=block.front(); block.pop(); ready.push_front(pid2); } q-=c[3]; break; case 'd': return; } ++ip[pid]; } ready.push_back(pid); } int main(){ int t; scanf("%d",&t); while(t--){ scanf("%d%d%d%d%d%d%d\n",&n,&c[0],&c[1],&c[2],&c[3],&c[4],&tq); memset(var,0,sizeof(var)); int line=0; for(int i=0;i<n;++i){ fgets(pro[line++],maxn,stdin); ip[i]=line-1; while(pro[line-1][2]!='d') fgets(pro[line++],maxn,stdin); ready.push_back(i); } locked=false; while(!ready.empty()){ int pid=ready.front(); ready.pop_front(); run(pid); } if(t) printf("\n"); } return 0; }
相关文章推荐
- 例题6-1 并行程序模拟 UVa210 双端队列
- 210 - Concurrency Simulator【模拟、双端队列】
- 例题6-1 双端队列 uva210
- UVA - 210 Concurrency Simulator(双端队列)
- UVA 11988 STL deque (双端队列||链表模拟)
- UVa 210 Concurrency Simulator(双端队列)
- UVa 210 Concurrency Simulator(双端队列)
- 紫书例题6-1 UVa210 ( 双端队列
- UVa 210 Concurrency Simulator(双端队列)
- 【日常学习】【双端队列】 Uva - 210 Concurrency Simulator题解
- UVa210 双端队列deque
- 【双端队列】例题6-1 UVa 210
- Uva210 Concurrency Simulator 【双端队列deque】【例题6-1】
- UVa210_Concurrency Simulator_双端队列的使用
- UVA 246 10-20-30 10-20-30游戏 模拟+STL双端队列deque
- UVA - 210 - Concurrency Simulator <双端队列>
- uva 540 Team Queue(队列+模拟)
- uva 12100 Printer Queue(打印队列)模拟
- uva 11988 - Broken Keyboard (a.k.a. Beiju Text)(双端队列deque)
- Java 模拟队列(一般队列、双端队列、优先级队列)