做到自闭。。。关了同步流直接就100了。。没关20。。本来还以为能关掉快点
题目不难,主要是字符串的分割不太懂。剩下来就是暴力模拟了。
#include <cstdio>
#include <string.h>
#include <iostream>
#include <string>
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e4 + 5;
const int MAX = 10;
// index[i]: 第i个进程目前所执行到的指令, num[i]: 第i个进程总的指令数目
int index[MAXN],num[MAXN], T, n;
struct ins
{
char type; // 指令类型
int p_num; // 指令的进程号
}inss[MAXN][MAX];
int get_num(string s)
{
int res = 0, len = s.size();
for(int i = 1; i < len; i++)
res = res * 10 + s[i] - '0';
return res;
}
int main()
{
scanf("%d %d ", &T, &n);
// std::ios::sync_with_stdio(false);
string buffer;
while(T--)
{
memset(index, 0, sizeof(index));
memset(num, 0, sizeof(num));
const char delim = ' ';
for(int i = 0; i < n; i++)
{
getline(cin, buffer);
// 分割字符串
istringstream iss(buffer);
while(getline(iss, buffer, delim))
{
if(buffer.size())
{
inss[i][num[i]].type = buffer[0];
inss[i][num[i]++].p_num = get_num(buffer);
}
}
}
bool flag = true;
while(flag)
{
flag = false;
for(int j = 0; j < n; j++)
{
if(index[j] < num[j])
{
if(inss[j][index[j]].type == 'S')
{
int d = inss[j][index[j]].p_num;
if(index[d] < num[d] && inss[d][index[d]].type == 'R' && inss[d][index[d]].p_num == j)
{
index[d]++;
index[j]++;
flag = true;
}
}
}
}
}
int ans = 0;
for(int i = 0; i < n; i++)
{
if(index[i] != num[i])
{
ans = 1;
break;
}
}
printf("%d\n", ans);
}
return 0;
}