例题6-1:并行程序模拟(deque的使用)
来源:互联网 发布:淘宝鹊桥什么意思 编辑:程序博客网 时间:2024/05/21 08:56
例题6-1:并行程序模拟
题意:
给定n个程序,每种程序有五种操作,分别为 var = constant(赋值),print var (打印), lock, unlock,end 变量用小写字母表示,初始化为0,为程序所公有(一个程序里对某个变量修改可以会影响其他程序里的这个变量),常数小于100(也就是说最多两位数)。每个时刻都只能有一个程序处于运行状态,其他的都在等待,上述五种操作用时分别是t1, t2, t3, t4, t5。运行中的程序每次最多能运行q个时间,当q个时间被用完后,它会被放在等待队列的尾部,然后再从首部取出一个程序运行,初始等待队列按输入顺序,
但是lock和unlock会改变顺序,它们总是成对出现,不会出现嵌套。如果某个程序已经执行了lock,后面还有程序执行lock,那么这个程序就会马上被放到一个阻止队列的尾部(当然如果运行时间还没用完也就浪费了)。当unlock结束后,阻止队列中的第一个程序进入等待队列的首部。问你程序的运行结果是什么,输出格式是第几个程序加冒号加空格加结果,两个相连的数据用空行隔开。
#include<iostream>#include<string>#include<string.h>#include<cstdio>#include<deque>#include<vector>#include<queue>using namespace std;const int MAXN=1005;bool lock;deque<int>qr;queue<int>qw;vector<string> sta[MAXN];int var[26],p[MAXN],t[MAXN];int Q;void run(int i){ int rt=Q,v; string cur; while(rt>0){ cur=sta[i][p[i]]; if(cur[2]=='='){ rt-=t[0]; v=cur[4]-'0'; if(cur.size()==6)v=v*10+cur[5]-'0'; var[cur[0]-'a']=v; } else if(cur[2]=='i'){ rt-=t[1]; printf("%d: %d\n",i,var[cur[6]-'a']); } else if(cur[2]=='c'){ rt-=t[2]; if(lock){ qw.push(i); return; } else lock=true; } else if(cur[2]=='l'){ lock=false; rt-=t[3]; if(!qw.empty()){ v=qw.front(); qw.pop(); qr.push_front(v); } } else return; ++p[i]; } qr.push_back(i);}int main(){ int cas; scanf("%d",&cas); while(cas--){ int n; scanf("%d",&n); for(int i=0;i<5;i++) scanf("%d",&t[i]); scanf("%d",&Q); string s; for(int i=1;i<=n;i++){ sta[i].clear(); while(getline(cin,s)){ if(s=="")continue; sta[i].push_back(s); if(sta[i].back()=="end")break; } qr.push_back(i); } memset(p,0,sizeof(p)); memset(var,0,sizeof(var)); while(!qr.empty()){ int cur=qr.front(); qr.pop_front(); run(cur); } if(cas) printf("\n"); } return 0;}
阅读全文
0 0
- 例题6-1:并行程序模拟(deque的使用)
- 例题6-1 并行程序模拟 UVa210 双端队列
- 例题6-1 并行程序模拟(Concurrency Simulator, ACM/ICPC World Finals 1991, UVa210)
- deque双端队列&&UVa210 Concurrency Simulator(并行程序模拟)的理解与解析
- 例题6-1 UVa 210(deque 双端队列)
- Uva210 Concurrency Simulator 【双端队列deque】【例题6-1】
- UVA 210 并行程序模拟
- 并行程序模拟,紫书P139UVa210
- 用Java runnable接口模拟多窗口(线程)销售同类型票的并行程序
- STL deque的使用
- deque的使用
- C++deque的使用
- C#例题3-1简单的程序
- 程序的并发与并行(读书笔记)
- 类的使用例题
- STL 中 deque 的使用
- STL deque的begin方法(6)
- STL deque的介绍(1)
- js基础笔记01
- 主机不能访问虚拟机CentOS中的站点
- 害死人不偿命的(3n+1)猜想 (15)方法2
- Python MD5加密算法
- python3 学习之路3
- 例题6-1:并行程序模拟(deque的使用)
- Visual Studio 2015 配置OpenCV3.3
- py 各种库下载及参考网址
- I/O 多路复用之select
- 习题6-11:树重建
- Golang
- localStorage
- 「Deep Learning」Notes on SoftMax
- 习题7-2:黄金图形