任务介绍

你的任务是模拟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. Mahout介绍

    3.11简介 Mahout:是一个Apache的一个开源的机器学习库,主要实现了三大类算法Recommender (collaborative filtering).Clustering.classi ...

  2. RockBrain USB Server- 云计算虚拟化USB设备集中管理、远程共享解决方案(涉及银企直联)

    RockBrain USB Server- 云计算虚拟化USB设备集中管理.远程共享解决方案(涉及银企直联) 技术需求: 1.企业员工的大量USB Key,需要将key接入USB Server虚拟池, ...

  3. QT 防止FTP 上传软件在断连处 Crash

    前段时间发现项目中的上传FTP软件有可能会在从服务器申请断连时Crash, 所以加了一个Timer. 由于项目代码行数过大, 此处上传部分代码片段. timeoutTimer = new QTimer ...

  4. 竞赛题解 - Karp-de-Chant Number(BZOJ-4922)

    Karp-de-Chant Number(BZOJ-4922) - 竞赛题解 进行了一次DP的练习,选几道题写一下博客~ 标签:BZOJ / 01背包 / 贪心 『题目』 >> There ...

  5. CentOS7 yum命令

    1.yum 清理缓存 [hado@localhost /]# yum clean all [hado@localhost /]# rm -rf /var/cache/yum/*

  6. Spring总结以及在面试中的一些问题

    Spring总结以及在面试中的一些问题. 1.谈谈你对spring IOC和DI的理解,它们有什么区别? IoC Inverse of Control 反转控制的概念,就是将原本在程序中手动创建Use ...

  7. ACM 2003~2005

    ACM 2003 求实数的绝对值 import java.util.Scanner; public class Lengxc { public static void main(String[] ar ...

  8. Windows 安装 MongoDB 并开启认证

    下载 可以自行上官网找需要的版本,Windows系统各个64位版本下载地址: http://dl.mongodb.org/dl/win32/x86_64 安装 正常的软件安装流程,这里就不细讲了. 配 ...

  9. ThinkPHP5.1完全开发手册.CHM离线版下载

    ThinkPHP5.1完全开发手册.CHM离线版下载 ThinkPHP5.1完全开发手册离线版.CHM下载地址 百度云:链接: https://pan.baidu.com/s/1b4jKJN-8UyI ...

  10. Redis,传统数据库,HBase,Hive区别联系

    首先介绍各个数据库: Redis: 传统数据库: HBase: Hive: