UVA 210 并行程序模拟
来源:互联网 发布:java的语句类型 编辑:程序博客网 时间:2024/05/29 19:59
这道题模拟程序执行过程,就绪队列使用STL的双端队列deque,阻止队列使用普通队列。在遇到unlock时,把阻止队列的头节点放入就绪队列的队首。
代码如下:
#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<string>#include<deque>#include<queue>using namespace std;typedef struct{ int ID; char cmd[30][100]; int next;}Process;Process ps[1005];int var[26];int n;//n programint timeuse[5];// 5 kind statement timeuse costint period;bool locked;queue<int> blockq;deque<int> readyq;void run(int p){ int tleft = period; while (tleft>0){ int n = ps[p].next; char* str = ps[p].cmd[n]; if (str[2] == '='){//var = constant int s = 0; for (int i = 4; str[i] != '\0'; i++){ s = s * 10 + (str[i] - '0'); } var[str[0] - 'a'] = s; tleft -= timeuse[0]; } else if (str[2] == 'i'){//print int d = str[6] - 'a'; cout << p << ": " << var[d] << endl; tleft -= timeuse[1]; } else if (str[2] == 'c'){//lock if (locked){ blockq.push(p); return; } else{ locked = true; tleft -= timeuse[2]; } } else if (str[2] == 'l'){//unlock locked = false; if (!blockq.empty()){ int p = blockq.front(); blockq.pop(); readyq.push_front(p); } tleft -= timeuse[3]; } else//end return; ps[p].next++; } readyq.push_back(p); return;}int main(){ int t; cin >> t; while (t--){ cin >> n; for (int i = 0; i < 5; i++) cin >> timeuse[i]; cin >> period; getchar(); locked = false; memset(var, 0, sizeof(var)); readyq.clear(); for (int i = 1; i <= n; i++){ int j = 0; while (true){ cin.getline(ps[i].cmd[j], 100); if (!strcmp(ps[i].cmd[j], "end")) break; j++; } ps[i].ID = i; ps[i].next = 0; readyq.push_back(i); } while (!readyq.empty()){ int cur = readyq.front(); readyq.pop_front(); run(cur); } if (t) cout << endl; } return 0;}
阅读全文
0 0
- UVA 210 并行程序模拟
- uva 210 Concurrency Simulator (并行堆栈模拟)
- 并行程序模拟,紫书P139UVa210
- 万年模拟- UVA - 210
- 例题6-1 并行程序模拟 UVa210 双端队列
- 例题6-1:并行程序模拟(deque的使用)
- 用Java runnable接口模拟多窗口(线程)销售同类型票的并行程序
- deque双端队列&&UVa210 Concurrency Simulator(并行程序模拟)的理解与解析
- 例题6-1 并行程序模拟(Concurrency Simulator, ACM/ICPC World Finals 1991, UVa210)
- UVA 210 Concurrency Simulator(deque,queue,模拟)
- rowid切片,模拟oracle并行
- Qt OpenMP并行程序
- 测试并行程序
- 测试并行程序
- 测试并行程序
- 并行程序“锁”相关
- SPLASH2并行测试程序
- 一个并行程序
- 文章标题
- 加载地址和链接地址
- 把Qt 的窗口程序 嵌入到 MFC 的窗口程序
- 大整数除法
- Linux实时技术与典型实现分析-第 2 部分
- UVA 210 并行程序模拟
- Maven Build时提示:Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test
- 使用IntelliJ IDEA导入storm-starter并测试WordCountTopology运行出现 A JNI error has occurred的原因和解决
- POJ 1083 Moving Tables
- 代码编程:(五)函数规范
- Linux 实时技术与典型实现分析, 第 1 部分: 介绍
- 读鸟哥linux私房菜有感(20170709)
- 深入理解linux网络技术内幕第一笔
- <Triggers><asp:PostBackTrigger ControlID="btnExportServiceAgency" /></Triggers