中级玩家
 
- 贡献度
- 0
- 金元
- 2317
- 积分
- 232
- 精华
- 0
- 注册时间
- 2014-10-3
|
#include <bits/stdc++.h>
using namespace std;
typedef vector <string> vs;
const int N=10007;
int n,s[N],r[N],num[N];
struct node{int x,y;bool flag;};
node msg[N][10];
queue<node> q;
void got(int k){
if(num[k]){
q.push(msg[k][num[k]]);
num[k]--;
}
}
int main()
{
int T;cin>>T>>n;getchar();
while(T--){
memset(s,-1,sizeof(s));
memset(r,-1,sizeof(r));
memset(msg,0,sizeof(msg));
memset(num,0,sizeof(num));
for(int i=0;i<n;i++){
string str;getline(cin,str);
istringstream iss(str);
vs ans;
while(getline(iss,str,' '))
if(str.size())
ans.push_back(str);
vs sv=ans;
num[i]=sv.size();
for(int j=0;j<sv.size();j++){
int k=num[i]-j,nn=0;
msg[i][k].x=i;
for(int i=0;i<sv[j].substr(1).size();i++)nn=nn*10+sv[j].substr(1)[i]-'0';
msg[i][k].y=nn;
if(sv[j][0]=='S')msg[i][k].flag=1;
}
}
for(int i=0;i<n;i++) got(i);
int sum=0;
while(!q.empty()){
node tmp=q.front();q.pop();
bool isok=0;
int x=tmp.x,y=tmp.y;
if(tmp.flag){
if(r[y]==x){isok=1;r[y]=-1;got(x);got(y);}
else s[x]=y;
}
else{
if(s[y]==x){isok=1;s[y]=-1;got(x);got(y);}
else r[x]=y;
}
if(isok)sum++;
else sum--;
}
if(sum==0)cout<<"0\n";
else cout<<"1\n";
}
return 0;
}
|
|