CCF CSP 竞赛试题——消息传递接口(201903-4)

#include <iostream>
#include <stdio.h>
#include <cctype>
#include <list>
#include <vector>
using namespace std;

struct STATE {
    int id;
    bool send;
};

int main() {
    int T, n;
    cin >> T >> n;
    getchar();
    while (T--) {
        vector<list<STATE> > A;
        for (int k = 0; k < n; ++k) {
            string s;
            getline(cin, s);
            list<STATE> cur;
            for (int i = 0; i < s.length();) {
                STATE x;
                x.send = s[i] == 'S';
                x.id = 0;
                while (isdigit(s[++i])) x.id = x.id * 10 + s[i] - '0';
                ++i;
                cur.push_back(x);
            }
            A.push_back(cur);
        }
        while (true) {
            bool done = true;
            bool refreshed = false;
            for (int i = 0; i < n; ++i) if (!A[i].empty()) {
                done = false;
                if (!A[i].begin()->send) {
                    int idx = A[i].begin()->id;
                    if (!A[idx].empty() && A[idx].begin()->send && A[idx].begin()->id == i) {
                        A[idx].erase(A[idx].begin());
                        A[i].erase(A[i].begin());
                        refreshed = true;
                        break;
                    }
                }
            }
            if (done) {
                cout << 0 << endl;
                break;
            } else if (!refreshed) {
                cout << 1 << endl;
                break;
            }
        }
    }
    return 0;
}
发布了33 篇原创文章 · 获赞 4 · 访问量 8738

猜你喜欢

转载自blog.csdn.net/Touchig/article/details/102837261