LRJ-Example-06-01-Uva210
2024-09-01 17:52:05
#define _CRT_SECURE_NO_WARNINGS #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <istream>
#include <iostream>
#include <deque>
#include <queue> using namespace std; int t[]; // unit execution times, assignment, print, lock, unlock, end
int quantum; const int N = ; // up to 10 programs
vector<string> prog[N]; // programs
int pc[N]; // program counter for each program bool lock;
deque<int> qr;//ready queue of program ID
queue<int> qb;//blocked queue of program ID int var[]; // values of 26 shared variables void run(int i) // i -- program ID
{
int rt = quantum;
string stmt;
while (rt > )
{
stmt = prog[i][pc[i]];
if (stmt[] == '=') // assignment
{
rt -= t[];
// decimal number less than 100
int v = stmt[] - '';
if (stmt.size() == ) v = v * + stmt[] - '';
var[stmt[] - 'a'] = v;
}
else if (stmt[] == 'i') //print
{
rt -= t[];
printf("%d: %d\n", i, var[stmt[] - 'a']);
}
else if (stmt[] == 'c') //lock
{ if (lock)
{
// program counter is not incremented
// the first statement this program will execute when it runs will be the lock statement failed
qb.push(i);
return; // lose any of its quantum remaining
}
else
{
rt -= t[];
lock = true;
} }
else if (stmt[] == 'l') //unlock
{
rt -= t[];
lock = false;
if (!qb.empty())
{
qr.push_front(qb.front());
qb.pop();
}
}
else
return; //end ++pc[i]; // increment the program counter
}
qr.push_back(i);
} int main()
{
int T, n;
scanf("%d", &T);
while (T--)
{
scanf("%d", &n); // number of programs for (int i = ; i < ; i++)
scanf("%d", &t[i]); scanf("%d", &quantum); for (int i = ; i <= n; i++)
{
prog[i].clear();
string s;
while (getline(cin, s))
{
if (s == "") continue; // empty line
prog[i].push_back(s);
if (s == "end") break;
}
qr.push_back(i);
} memset(pc, , sizeof(pc));
memset(var, , sizeof(var)); // all variables are initially set to zero while (!qr.empty())
{
int id = qr.front();
qr.pop_front();
run(id);
} if (T)
printf("\n");
}
return ;
}
最新文章
- XtraBackup安装
- excel查看VBA代码快捷键
- vs2010中使用Nunit测试c#代码结果的正确性
- NEWS - InstallShield 2015 正式发布
- window7快捷键
- 教你21天学会C++ (有图有真相)
- thinkphp 常见问题
- 【干货】.NET开发通用组件发布(三) 简易数据采集组件
- DirectX11 学习笔记3 - 创建一个立方体 和 轴
- shell脚本字符串截取
- Java进阶(十一)部分数据类型取值范围
- .NET 常用ORM之Nbear
- golang高性能端口扫描
- debug 在windows下的使用
- Sanjeev Arora
- JsonPath的使用
- MySQL的转义符 ` 作用
- Thinkphp的cookie的怎么玩?
- Spring Boot 全局异常配置
- Android学习笔记(4)----Rendering Problems(The graphics preview in the layout editor may not be accurate)