题目
试题编号: 201903-4
试题名称: 消息传递接口
知识点
字符串处理
代码
#include<bits/stdc++.h>
using namespace std;
int t, n;
int sum = 0;
int tn;
struct node
{
//int id;
char option;
int num;
};
int main()
{
std::ios::sync_with_stdio(false);
cin >> t >> n;
getchar();
vector<vector<node>>opt(n+1);
//vector<node>opt(n + 1);
for (int i = 0; i < t; i++)//每一组输出一个
{
int flag = 0;
for (int j = 0; j < n; j++)//读入
{
/* char x;
while (scanf("%c", &x) )
{
if (x == '\n')
break;
if (x == ' ')
{
continue;
}
else
{
sum++;
int tnum;
scanf("%d", &tnum);
node topt = { x,tnum };
opt[j].push_back(topt);
}
}*/
string s;
char ch;
while (cin >> s)
{
node x;
x.option = s[0];
string t = s.substr(1);//取出第一个字符后的所有数字"15"
int num = atoi(t.c_str());//转整形
x.num = num;
opt[j].push_back(x);
sum++;
ch = cin.get();
if (ch == '\n') break;
}
}
while (sum)
{
bool first = true;
for (int j = 0; j < n; j++)
{
if (opt[j].size() != 0)
{
int tj = opt[j][0].num;
if (opt[tj].size() == 0)//判断跳转的是否有命令
{
first = false;
flag = 1;
sum = 0;
break;
}
if (opt[j][0].option == 'S')//如果是发送
{
first = false;
if (opt[tj][0].option == 'R'&&opt[tj][0].num == j)
{//匹配删除节点
//vector<node>::iterator k = opt[j].begin();
opt[j].erase(opt[j].begin());
//vector<node>::iterator l = opt[tj].begin();
opt[tj].erase(opt[tj].begin());
sum -= 2;
}
else
{
flag = 1;
sum = 0;
break;
}
}
}
}
if (first)//如果没有进入过
{
first = false;
flag = 1;
sum = 0;
break;
}
}
cout << flag << endl;
for (int j = 0; j < n; j++)
opt[j].clear();
sum = 0;
}
return 0;
}
/*
1 3
R1
R2 S0 R0
S1 R1
*/
/*
2 3
R1 S1
R2 S0 R0 S2
S1 R1
R1
R2 S0 R0
S1 R1
*/