201903-4 消息传递接口

Posted lllaih

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 == 
) {
                    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;
}

 

以上是关于201903-4 消息传递接口的主要内容,如果未能解决你的问题,请参考以下文章

201903-4 消息传递接口 (80')

201903-4 消息传递接口

将接口从片段传递到kotlin中的活动

ccf 201903-4

接口测试中的消息接口和代码接口

回调方式进行COM组件对外消息传递