#include<bits/stdc++.h>
using namespace std;
void split(const string& s, vector<string>& sv, const char flag = ' '){
sv.clear();
istringstream iss(s);
string temp;
while(getline(iss, temp, flag)){
sv.push_back(temp);
}
}
int main(){
string s;
int T, n;
cin >> T >> n;
cin.ignore();
for(int t = 0; t < T; t++){
set<int> wait;
set<int> done;
int reco[n][2];
int index[n];
vector<vector<string> > msg;
for(int i = 0; i < n; i++){
vector<string> row;
getline(cin, s);
split(s, row);
msg.push_back(row);
}
memset(index, 0, sizeof(index));
memset(reco, -1, sizeof(reco));
for(int i = 0; wait.size() + done.size() != n; i = (i + 1) % n){
if(wait.find(i) == wait.end() || done.find(i) == done.end()){
string s = msg[i][index[i]];
int tar = atoi(s.substr(1).c_str());
if(s[0] == 'S'){
if(reco[tar][0] == i){
reco[tar][0] = -1;
wait.erase(tar);
index[i]++;
if(index[i] == msg[i].size()) done.insert(i);
index[tar]++;
if(index[tar] == msg[tar].size()) done.insert(tar);
}else{
reco[i][1] = tar;
wait.insert(i);
}
}else if(s[0] == 'R'){
if(reco[tar][1] == i){
reco[tar][0] = -1;
wait.erase(tar);
index[i]++;
if(index[i] == msg[i].size()) done.insert(i);
index[tar]++;
if(index[tar] == msg[tar].size()) done.insert(tar);
}else{
reco[i][0] = tar;
wait.insert(i);
}
}
}
}
cout << (wait.size() == 0 ? 0 : 1) << endl;
}
return 0;
}
不保证完全通过,仅测试了样例。