任务介绍

你的任务是模拟n个程序的并行运算。(按照输入编号为1~n)的并行执行。

代码实现

#define LOCAL
#include<bits/stdc++.h>
using namespace std;
int main(){
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif // LOCAL
int n,t[5],Q;
scanf("%d%d%d%d%d%d%d",&n,&t[0],&t[1],&t[2],&t[3],&t[4],&Q);
unordered_map<char,int>variable;//变量与其值的映射关系
deque<int>block,wait;//阻塞队列、等待队列
bool lock=false;//锁
vector<deque<string>>program(n+1);//每个程序
for(int i=1;i<=n;++i){//读取每个程序代码
wait.push_back(i);//。初始等待队列包含按输入顺序排列的各个程序
string line;
while(getline(cin,line)&&line!="end")
program[i].push_back(line);
program[i].push_back("end");
}
while(!wait.empty()){//等待队列不空就继续循环
int cur=wait.front();//读取当前运行的程序
wait.pop_front();
if(program[cur].empty())//当前程序已运行完毕,不再执行任何操作
continue;
wait.push_back(cur);//将当前运行的程序插入到等待队列末尾
for(int time=0;time<Q;){//当前程序运行时间小于配额时继续执行
string s=program[cur].front();//读取需要执行的指令
program[cur].pop_front();//弹出队首指令
if(s[2]=='='){//是赋值指令
variable[s[0]]=stoi(s.substr(4));//更新或插入变量及其对应值
time+=t[0];//更新当前程序运行时间
}else if(s[2]=='i'){//是print指令
printf("%d: %d\n",cur,variable[s[6]]);//打印
time+=t[1];//更新当前程序运行时间
}else if(s[2]=='c'){//是lock指令
if(lock){//已经上锁了
program[cur].push_front(s);//当前指令重新压回队首
block.push_back(cur);//当前程序插入到阻塞队列队尾
wait.pop_back();//将当前程序从等待队列末尾中删除
break;//不再执行其他指令
}//没有上锁过
lock=true;//上锁
time+=t[2];//更新当前程序运行时间
}else if(s[2]=='l'){//unlock指令
lock=false;//解除上锁
time+=t[3];//更新当前程序运行时间
if(!block.empty()){//阻塞队列不空
wait.push_front(block.front());//将阻塞队列队首程序插入到等待队列队首
block.pop_front();//弹出阻塞队列队首程序
}
}else if(s[2]=='d')//end指令
break;//直接跳出循环
}
}
return 0;
}

并行程序模拟(Concurrency Simulator, ACM/ICPC World Finals 1991,Uva210)的更多相关文章

  1. UVa210 Concurrency Simulator (ACM/ICPC World Finals 1991) 双端队列

    Programs executed concurrently on a uniprocessor system appear to be executed at the same time, but ...

  2. [算法竞赛入门经典]Message Decoding,ACM/ICPC World Finals 1991,UVa213

    Description Some message encoding schemes require that an encoded message be sent in two parts. The ...

  3. uva 210 - Concurrency Simulator (并行程序模拟)

    from CSDN: https://blog.csdn.net/su_cicada/article/details/87898579 例题6-1 并行程序模拟( Concurrency Simula ...

  4. ACM - ICPC World Finals 2013 C Surely You Congest

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 题目翻译: 试题来源 ACM/ICPC World Fin ...

  5. HDU 5873 Football Games 【模拟】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Football Games Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)To ...

  6. 6-1 并行程序模拟 uva210

    用到了 deque 和queue 操作说明: queue  qu:      qu.push(x); int d=qu.front(); qu.pop();        和栈一样只有push和pop ...

  7. UVa 210 并行程序模拟(deque)

    题意: 模拟n个程序运行 格式一共有5种:var = constant(赋值):print var(打印):lock:unlock:end, 上述5种语句分别需要t1.t2.t3.t4.t5单位时间 ...

  8. ACM - ICPC World Finals 2013 A Self-Assembly

    原题下载 : http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 这道题其实是2013年我AC的第一道题,非常的开心,这 ...

  9. ACM - ICPC World Finals 2013 B Hey, Better Bettor

    原题下载:http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 这题真心的麻烦……程序不长但是推导过程比较复杂,不太好想 ...

随机推荐

  1. tomcat解析

    tomat是一个servlet容器,来处理http请求.在平时的使用中我们都会再浏览器中输入http地址来访问服务资源,比如格式http://host[":"port][abs_p ...

  2. 工具 | Axure基础操作 No.2

    不废话了,直接如之前一样上操作图才是正道. 1.设置文本类型为密码或者文件类型 可以在属性中也选择最大长度制定长度. 如果设置类型为文件,在浏览器中就会自动变成选择本地文件的按钮. 2.文本框提示文字 ...

  3. 原生js实现简单的随机点名系统

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  4. LeetCode 中级 - 优势洗牌(870)

    给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述. 返回 A 的任意排列,使其相对于 B 的优势最大化. 示例 2: 输入: ...

  5. 笔记: 对称加密算法的PKCS5 和 PKCS7 填充

    PKCS #7 填充字符串由一个字节序列组成,每个字节填充该填充字节序列的长度. 假设,块的长度是 8, 数据长度是 5 数据:AA AA AA AA AA PKCS#7 填充 AA AA AA AA ...

  6. awk命令用法

    awk:把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理,是一个强大的文本分析工具,在对数据分析并生成报告时很有优势. awk有3个不同版本: awk.nawk和gawk, ...

  7. CentOS7 LNMP+phpmyadmin环境搭建(二、LNMP环境搭建)

    上一篇博客我们在虚拟机上安装了centos7,接下来,就开始安装lnmp环境吧. 还是跟之前一样,进入命令行后,先使用su命令切换到root权限. 首先配置防火墙  CentOS 7.0默认使用的是f ...

  8. webpack4的react打包错误

    因为之前一直用的是脚手架创建项目,第一次自己学习创建webpack打包.loader我是复制别人的. module: { loaders: [ { test: /\.js?$/, exclude: / ...

  9. pyhton新手学习之增删改查

    一 .列表的定义 1.列表的定义     names = [ "xiajiqni", "test", "wangwu","oldb ...

  10. Leecode刷题之旅-C语言/python-121买卖股票的最佳时机

    /* * @lc app=leetcode.cn id=121 lang=c * * [121] 买卖股票的最佳时机 * * https://leetcode-cn.com/problems/best ...