201903-4 消息传递接口

样例1

输入:

3 2
R1 S1
S0 R0
R1 S1
R0 S0
R1 R1 R1 R1 S1 S1 S1 S1
S0 S0 S0 S0 R0 R0 R0 R0

输出:

0

1

0

样例二:

输入:

2 3
R1 S1
R2 S0 R0 S2
S1 R1
R1
R2 S0 R0
S1 R1

输出:

0

1

思路:

1.建一个结构体,存x S/R y  ,注意,x 可能不止一位数。用队列顺序存储每个进程。

2.用getchar()来取字符串后面的字符,如果取到的是换行,那么该进程结束,去取下一个进程。

3.如果顺序遍历每个进程都没有匹配成功的话,匹配结束,如果还存在队列不为空的话,则发生了死锁。

#include <algorithm>
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
const int maxn = 1e5 + 5;
struct Node {
    int x,z;
    char y;
};
int main() {
    int t,n;
    cin >> t >> n;
    while(t--) {
        queue<Node>q[n+1];
       for(int i = 0; i < n; i++) {
        while(!q[i].empty())
            q[i].pop();
       }
        for(int i = 0; i < n; i++) {
            string s;
            char c;
            while(cin >> s) {
                c = getchar();
                Node temp;
                temp.x = i;
                temp.y = s[0];
                temp.z = 0;
                for(int j = 1; j < s.length(); j++){
                    temp.z = temp.z*10 + s[j] - ‘0‘;
                }
                q[i].push(temp);
                if(c == ‘\n‘) {
                    break;
                }
            }
        }
        int flag = 0;
        int k = 0;
        while(1) {

            k = 0;
            for(int i = 0; i < n; i++){
            if(q[i].empty()) continue;
            Node temp = q[i].front();
            int x = temp.x;
            char y ;
            int z = temp.z;
            if(temp.y == ‘R‘)  y = ‘S‘;
            else y = ‘R‘;
            if(q[z].empty()) {
                flag = 1;
                break;
            }
            Node temp2 = q[z].front();
            if(temp2.z == x && temp2.y == y) {
                q[i].pop();
                q[z].pop();
                i--;
                k++;
            }
            else {
                continue;
            }
        }
        if(k == 0) break;
        }
        k = 0;
        for(int i = 0; i < n; i++) {
                if(!q[i].empty()){
                  flag = 1;
                  break;
                }
            }
        if(flag == 1) cout << 1 << endl;
        else cout << 0 <<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/LLLAIH/p/11664182.html

时间: 2024-10-21 16:40:49

201903-4 消息传递接口的相关文章

201903-4 消息传递接口 (80&#39;)

最后一个点T,不知道怎么优化比较好. #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> pii; #define pb(x) push_back(x) #define cls(x, val) memset(x, val, sizeof(x)) #define fi first #defin

ccf 201903-4 消息传递接口 100

思路:我们发现每个进程的代码都由空格隔开,代码都有两部分组成:标识符:‘R' or ’S';目的进程:一组数字字符串. 成功接受或发送,那么这份代码便消失了,开始该进程下一份代码的比较.这让我们很容易想到队列. 我们为每个进程都创建一个队列,队列中放代码,成功匹配代码,我们便将其从队列中pop掉,那么判断进程是否阻塞便变为了判断终态的队列是否为空. 剩下的就是比对了,直接比对显然很困难,我们可以定义一个结构体,这个结构体便相当于我们的代码,标识符‘R' or ’S'我们可以转化为0,1:数字字符

C#并行编程

一.基于任务的程序设计 共享内存多核OS和分布式内存OS 共享内存多核OS-一个微处理器由多个内核组成,且每个内核共享一段私有内存: 分布式内存OS-- 由多个微处理器组成,每个微处理器可以有自己的私有内存,微处理器可以位于不同的计算机上,每个计算机可以有不同的通信信道 消息传递接口(MPI):运行在分布式内存计算机系统上的并行应用程序所使用的最流行的通信协议: 并行程序设计和多核程序设计 并行程序是指同一时刻运行多条指令,编写的代码能够充分利用底层硬件提供的并行执行能力:多核程序设计能够充分利

分布式机器学习的集群方案介绍之HPC实现

机器学习的基本概念 机器学习方法是计算机利用已有的数据(经验),得出了某种模型(迟到的规律),并利用此模型预测未来(是否迟到)的一种方法.目前机器学习广泛应用于广告投放.趋势预测.图像识别.语音识别.自动驾驶和产品推荐等众多领域. 在确定了问题模型之后,根据已知数据寻找模型参数的过程就是训练,训练过程就是不断依据训练数据来调整参数的迭代,从而使依据模型作出的预测结果更加准确. HPC的基本概念 HPC就是高性能计算或高性能计算集群的简写.为了追求高性能,HPC的工作负载一般直接运行在Linux系

并行编程入门

目录 1. 并行编程简介 2. MapReduce 2.1 MapReduce简介 2.2 MapReduce框架 2.3 Hadoop介绍 2.4 Hadoop基本类 2.5 Hadoop编程实例 1.并行编程简介 1.1.并行编程作用,用途 商业用途,科学计算,大数据分析 1.2.并行编程兴起原因 目前的串行编程的局限性 使用的流水线等隐式并行模式的局限性 硬件的发展 1.3.并行算法设计原则步骤 a.分析问题 b.分解问题 其中分解方法有: 数据分解 递归分解 探测性分解 推测性分解 混合

MPI编程简单介绍

第三章MPI编程 3.1 MPI简单介绍 多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间.因此,这样的模型仅仅能在共享存储系统之间移植.一般来讲,并行机不一定在各处理器之间共享存储,当面向非共享存储系统开发并行程序时,程序的各部分之间通过来回传递消息的方式通信.要使得消息传递方式可移植,就须要採用标准的消息传递库.这就促成的消息传递接口(Message Passing Interface, MPI)的面世,MPI是一种被广泛採用的消息传递标准[1]. 与OpenMP并行程序不

CUDA学习和总结1

一. 基本概念 1. CUDA 2007年,NVIDIA推出CUDA(Compute Unified Device Architecture,统一计算设备架构)这个编程模型,目的是为了在应用程序中充分利用CPU和GPU各自的优点,实现CPU/GPU联合执行.这种联合执行的需要已经在最新的集中编程模型(OpenCL,OpenACC,C++ AMP)中体现出来了. 2. 并行编程语言和模型 使用比较广泛的是为可扩展的集群计算设计的消息传递接口(Message Passing Interface,MP

分布式系统

Distributed systems: for fun and profit (http://book.mixu.net/distsys/index.html) 链接:https://www.zhihu.com/question/23645117/answer/124708083 这篇文章主要试图回答以下两个个问题:1. 近些年分布式系统领域都在做些什么.2. 为什么现在投入分布式系统的学习和研究是值得的.我会尽可能多的去介绍更 "实用" 的分布式系统知识. 什么是实用?例如:Pax

什么是代码现代化?

By Mike P. (Intel), Added 2015 年 7 月 8 日 现代高性能计算机由下列资源组合构建而成:多核处理器.众核处理器.大型高速缓存,高带宽进程间通信结构和高速 I/O 功能. 高性能软件需经过设计,以充分利用这些丰富的资源. 无论是重新构建并/或调优现有应用以发挥最高性能,或为现有或未来设备构建新应用,了解编程模型和高效利用资源之间的相互作用极其关键. 以此为起点,全面了解代码现代化. 关于性能,您的代码至关重要! 构建软件的并行版本可使应用在更短的时间内运行指定的数