首页 > 编程语言 >UVA-210 并行程序模拟 题解答案代码 算法竞赛入门经典第二版

UVA-210 并行程序模拟 题解答案代码 算法竞赛入门经典第二版

时间:2023-03-07 11:02:21浏览次数:42  
标签:cnt 210 并行程序 题解 readys int cntTime line include


​GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版​

注意:

每次unlock后,只需要拿出一个在阻塞队列里面的程序放到等待队列的头部。因为既然是放到阻塞队列中的,肯定是需要lock的,即使可以拿出来多个,也只有一个可以被执行,后续的肯定还会被lock,因此只需要拿出一个。

AC代码

#include<iostream>
#include<string>
#include<string.h>
#include<deque>
#include<queue>
#include<vector>
#include<stdlib.h>
using namespace std;

int values[30];
deque<int> readys;
queue<int> blocks;
struct PROM {
vector<string> lines;
int cur;
};
vector<PROM> pros;
int stateTime[5] = {};
int quantum;

void init() {
memset(values, 0, 30*sizeof(int));
pros.clear();
readys.clear();
blocks = queue<int>();
memset(stateTime, 0, 5*sizeof(int));
quantum = 0;
}

void inputs() {
string line;
int t, i, j, k;
cin >> t;
for(i = 0; i < 5; ++i) {
cin >> stateTime[i];
}
cin >> quantum;
getchar();
for(i = 0; i < t; ++i) {
PROM p;
p.cur = 0;
do {
getline(cin, line);
p.lines.push_back(line);
} while(line != "end");
pros.push_back(p);
readys.push_back(i);
}
}

void assignment(string line) {
int a = line[0] - 'a';
values[a] = atoi(line.substr(4).c_str());
}

void print(int cnt, char c) {
cout << cnt+1 << ": " << values[c - 'a'] << endl;
}

void compute() {
int cnt, cntTime, i, j, k;
bool lockFlag = false, noReady;
string line;
while(!readys.empty()) {
cnt = readys.front();
readys.pop_front();
cntTime = quantum;
noReady = false;
while(cntTime > 0) {
line = pros[cnt].lines[pros[cnt].cur++];
if(line == "end") {
noReady = true;
break;
}
if(line[2] == '=') {
assignment(line);
cntTime -= stateTime[0];
}
if(line[1] == 'r') {
print(cnt, line[6]);
cntTime -= stateTime[1];
}
if(line == "lock") {
cntTime -= stateTime[2];
if(lockFlag == false) {
lockFlag = true;
} else {
--pros[cnt].cur;
blocks.push(cnt);
noReady = true;
break;
}
}
if(line == "unlock") {
cntTime -= stateTime[3];
lockFlag = false;
if(!blocks.empty()) {
k = blocks.front();
blocks.pop();
readys.push_front(k);
}
}
}
if(noReady == false) {
readys.push_back(cnt);
}
}
}

int main() {
int t, i, j;
cin >> t;
while(t--) {
init();
inputs();
compute();
if(t) cout << endl;
}
return 0;
}

标签:cnt,210,并行程序,题解,readys,int,cntTime,line,include
From: https://blog.51cto.com/u_15995687/6105505

相关文章

  • UVA-822 客户中心模拟 题解答案代码 算法竞赛入门经典第二版
    ​​GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版​​AC代码这个题目的做法可能并不唯一,对于某些场景有不同的答案也能过。我的思路:是......
  • UVA-12333 Fibonacci的复仇 题解答案代码 算法竞赛入门经典第二版
    ​​GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版​​算法竞赛入门经典书中给出了大数类的算法,直接照抄即可。我的做题过程:1.照着书......
  • UVA-1596 找bug 题解答案代码 算法竞赛入门经典第二版
    ​​GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版​​AC代码有个点需要注意:ASCII中,在Z和a中间还有6个字符,因此数组开大一点比较好。ge......
  • UVA-1598 交易所 题解答案代码 算法竞赛入门经典第二版
    ​​GitHub-jzplp/aoapc-UVA-Answer:算法竞赛入门经典例题和习题答案刘汝佳第二版​​AC代码有意思的一个题目。书上说这是一个不错的优先队列练习题,但实际上它其实是......
  • PAT 乙级 1014 题解 (Basic Level) Practice
    很简单的一道题,我的程序有点乱#include<stdio.h>#include<string.h>#include<ctype.h>intmain(){chars1[61];chars2[61];chars3[61];chars4[61];s......
  • [CF1648D]Serious Business 题解
    [CF1648D]SeriousBusiness题解首先容易想到一个\(dp\)转移式子:\[dp_{i}=\max_{j\lei}s_{1,j}-cost_{j,i}-s_{2,j-1}+s_{2,i}+s_{3,n}-s_{3,i-1}\]其中\(dp_i\)......
  • NOI2023春测题解
    NOI2023春测题解目录NOI2023春测题解更好的阅读体验戳此进入游记戳此进入T1LG-P9117[春季测试2023]涂色游戏题面SolutionCodeT2LG-P9118[春季测试2023]幂次题面So......
  • 春季测试2023全题解
    T1涂色游戏非常困难的题目,我们需要记录每一行/每一列最后一次被修改的时间以及被修改成什么颜色。输出的时候每一个格子是受行影响还是列影响即可。复杂度\(O(nm)\)。......
  • [SDOI2019] 移动金币 题解
    首先考虑一个状态什么时候是合法的。不难把游戏过程抽象为阶梯Nim博弈。根据阶梯Nim博弈的结论,先手必胜当且仅当奇数位上的异或和不为0。考虑将本题中每个棋子后面......
  • AcWing 4490. 染色题解
    题目描述样例输入:612215211111输出3算法描述思路我们以样例为例讲讲思路。如何确保dfs能顺利便利呢,我们可以使用链式前向星来存图(树)C++代......