CCF-CSP题解 201903-4 消息传递接口
求并行的各个进程,且进程内部顺序执行的情况下,会不会出现“死锁”。
首先用\(%[^\n]\)将每个进程读入。最后过不了居然是因为\(str[\ ]\)开小了(悲喜交加。存储在\(<op,\ pid>[\ ]\)中,并记录每个进程的指令数\(instNum[\ ]\)。
然后就是模拟。\(instCmp[\ ]\)记录每个进程已完成的指令数,\(instBlk[\ ]\)记录每个进程是否阻塞,\(numCmp,\ numBlk\)分别是完成和阻塞的进程数。主要思想是:每次执行到某条指令阻塞,然后执行下条指令并循环。判断是否阻塞,就是看\(<op, pid>\)对应的\(pid\)进程当前已完成的指令是否有下一条指令,以及下一条指令是否与之配对。
#include <bits/stdc++.h>
const int maxn = 10000;
using namespace std;
struct tInst
{
int op;
int pid;
};
tInst inst[maxn+10][10];
int instNum[maxn+10];
int instCmp[maxn+10];
int instBlk[maxn+10];
int numCmp, numBlk;
int main ()
{
int T, n;
scanf("%d%d", &T, &n);
getchar();
while (T--)
{
memset(instNum, 0, sizeof(instNum));
for (int i = 0; i <= n - 1; i++)
{
char str[100];
scanf("%[^\n]", str + 1);
getchar();
for (int j = 1, op = 0, pid = 0; ; j++)
{
if (str[j] == 'R')
op = 0;
else if (str[j] == 'S')
op = 1;
else if (str[j] >= '0' && str[j] <= '9')
pid = pid * 10 + str[j] - '0';
else if (str[j] == ' ')
{
inst[i][++instNum[i]].op = op;
inst[i][instNum[i]].pid = pid;
pid = 0;
}
else
{
inst[i][++instNum[i]].op = op;
inst[i][instNum[i]].pid = pid;
break;
}
}
}
memset(instCmp, 0, sizeof(instCmp));
memset(instBlk, 0, sizeof(instBlk));
numCmp = numBlk = 0;
int x = 0;
while (numCmp + numBlk != n)
{
while (instCmp[x] != instNum[x] && !instBlk[x])
{
int y = instCmp[x] + 1;
int op = inst[x][y].op, pid = inst[x][y].pid;
int xx = pid;
if (instCmp[xx] != instNum[xx])
{
int yy = instCmp[xx] + 1;
if (op + inst[xx][yy].op == 1 && x == inst[xx][yy].pid)
{
instCmp[x] ++; instCmp[xx] ++;
if (instCmp[x] == instNum[x])
numCmp ++;
if (instCmp[xx] == instNum[xx])
numCmp ++;
if (instBlk[xx])
{
instBlk[xx] = 0;
numBlk --;
}
}
else
{
instBlk[x] = 1;
numBlk ++;
}
}
else
{
instBlk[x] = 1;
numBlk ++;
}
}
x = (x + 1) % n;
}
if (numCmp == n)
printf("0\n");
else
printf("1\n");
}
return 0;
}
CCF-CSP题解 201903-4 消息传递接口的更多相关文章
- CCF CSP 201503-4 网络延时
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-4 网络延时 问题描述 给定一个公司的网络,由n台交换机和m台终端电脑组成,交换机 ...
- CCF CSP 201703-3 Markdown
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201703-3 Markdown 问题描述 Markdown 是一种很流行的轻量级标记语言(l ...
- CCF CSP 201312-3 最大的矩形
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201312-3 最大的矩形 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i( ...
- CCF CSP 201609-3 炉石传说
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201609-3 炉石传说 问题描述 <炉石传说:魔兽英雄传>(Hearthston ...
- CCF CSP 201403-3 命令行选项
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201403-3 命令行选项 问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些 ...
- CCF CSP 201709-4 通信网络
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201709-4 通信网络 问题描述 某国的军队由N个部门组成,为了提高安全性,部门之间建立了M ...
- CCF CSP 201409-3 字符串匹配
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201409-3 字符串匹配 问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那 ...
- CCF CSP 201503-3 节日
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201503-3 节日 问题描述 有一类节日的日期并不是固定的,而是以“a月的第b个星期c”的形 ...
- CCF CSP 201509-2 日期计算
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201509-2 日期计算 问题描述 给定一个年份y和一个整数d,问这一年的第d天是几月几日? ...
- CCF CSP 201604-2 俄罗斯方块
CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201604-2 俄罗斯方块 问题描述 俄罗斯方块是俄罗斯人阿列克谢·帕基特诺夫发明的一款休闲游 ...
随机推荐
- js 关于apply和call的理解使用
关于call和apply,以前也思考良久,很多时候都以为记住了,但是,我太难了.今天我特地写下笔记,希望可以完全掌握这个东西,也希望可以帮助到任何想对学习这个东西的同学. 一.apply函数定义与理解 ...
- 启动elasticsearch
- name: source env shell: source /etc/profile - name: make elastic permission shell: ...
- vue computed计算属性 watch监听
计算属性 computed:{ 变量:function(){ return 计算好的值 } } 这时候计算好的值 就付给了你的变量 在实例中可以this.使用 注意 声明的变量的data中不可以重复声 ...
- 三分钟带你入门 redis 高可用架构之哨兵
什么是哨兵? 哨兵(Sentinel)是 redis 的高可用性解决方案,前面我们讲的主从复制它是高可用的基础,需要人工介入才能完成故障转移,哨兵可以解决这个问题,在主从复制情况下,当主节点发生故障时 ...
- 史上最强Java NIO入门:担心从入门到放弃的,请读这篇!
本文原题“<NIO 入门>,作者为“Gregory M. Travis”,他是<JDK 1.4 Tutorial>等书籍的作者. 1.引言 Java NIO是Java 1.4版 ...
- SpringBoot 整合mongoDB并自定义连接池
SpringBoot 整合mongoDB并自定义连接池 得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它 ...
- 处理器CPU天梯图,显卡天梯图(性能排名图)
自己网上找的几个图,仅供参考,买电脑可以看看了~
- python模块StringIO和BytesIO
StringIO和BytesIO StringIO 很多时候,数据读写不一定是文件,也可以在内存中读写. StringIO顾名思义就是在内存中读写str. 要把str写入StringIO,我们需要先创 ...
- 2019-2020-1 20199304《Linux内核原理与分析》第二周作业
计算机工作原理 存储程序计算机模型 冯·诺依曼体系结构 冯·诺依曼体系结构如图所示: 冯·诺依曼体系结构包含五大部分 运算器:在控制器的统一控制下,负责对数据进行加工.完成各种运算,如算术运算.逻辑运 ...
- 神奇的 SQL 之 联表细节 → MySQL JOIN 的执行过程(一)
开心一刻 我:嗨,老板娘,有冰红茶没 老板娘:有 我:多少钱一瓶 老板娘:3块 我:给我来一瓶,给,3块 老板娘:来,你的冰红茶 我:玩呐,我要冰红茶,你给我个瓶盖干哈? 老板娘:这是再来一瓶,我家卖 ...