#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 ;
}

最新文章

  1. XtraBackup安装
  2. excel查看VBA代码快捷键
  3. vs2010中使用Nunit测试c#代码结果的正确性
  4. NEWS - InstallShield 2015 正式发布
  5. window7快捷键
  6. 教你21天学会C++ (有图有真相)
  7. thinkphp 常见问题
  8. 【干货】.NET开发通用组件发布(三) 简易数据采集组件
  9. DirectX11 学习笔记3 - 创建一个立方体 和 轴
  10. shell脚本字符串截取
  11. Java进阶(十一)部分数据类型取值范围
  12. .NET 常用ORM之Nbear
  13. golang高性能端口扫描
  14. debug 在windows下的使用
  15. Sanjeev Arora
  16. JsonPath的使用
  17. MySQL的转义符 ` 作用
  18. Thinkphp的cookie的怎么玩?
  19. Spring Boot 全局异常配置
  20. Android学习笔记(4)----Rendering Problems(The graphics preview in the layout editor may not be accurate)

热门文章

  1. day37 04-Hibernate二级缓存:list和iterate方法比较
  2. python 变量离散化
  3. 直白介绍卷积神经网络(CNN)【转】
  4. 初次接触python的re模块
  5. Sql server定时执行某个sql 通过Windows 计划任务(非代理Job方式)
  6. 媒体查询(media):设置PC端网页居中显示
  7. temp for @青
  8. nodejs request模块用法
  9. 2018-12-27-WPF-从文件创建图片的方法
  10. LintCode_420 报数