题意:
一种比赛,给定n个人
前n个分别是
白色进攻,黑色进攻,白色防守,黑色防守;
如果白色进攻得胜了,那么白方互换位置
黑方的防守方换人,进攻方变成防守方,新来一个人当进攻方
用队列模拟,
注意,传奇队的顺序是按照出场的前后顺序来的,我还以为是按照第一个是进攻方,第二个是防守方的。如果这样写的话,那么只要更换游戏一下就好了
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <iostream>
#include <vector>
#include <queue>
#include <string>
#include <set>
#include <stack>
#include <map>
using namespace std;
//连题都没看懂,对着代码看了两天。
//最后输出的是常胜将军队列是按照时间pai的;
//就是模拟,用队列模拟就行。
int n;
const int maxn=2000;
string a[maxn];
int main()
{ string a0,a1,b0,b1,c0,c1,d0,d1;
cin>>n;
for(int i=1;i<=n;i++)
{ cin>>a[i];
}
c0=a0=a[1];c1=a1=a[3];
d0=b0=a[2];d1=b1=a[4];
queue<string>q;
vector<pair<string,string> >G[maxn];
string c;
for(int i=5;i<=n;i++)
q.push(a[i]);
int W=0,B=0;
cin>>c;
for(int i=0;i<c.length();i++)
{ swap(b0,b1);
swap(a0,a1);
if(c[i]=='W')
{ W++;
B=0;
G[W].push_back(make_pair(c0,c1));
q.push(b0);
d1=b0=q.front();
q.pop();
d0=b1;
}
else if(c[i]=='B')
{ B++;
W=0;
G[B].push_back(make_pair(d0,d1));
q.push(a0);
c1=a0=q.front();
q.pop();
c0=a1;
}
}
for(int i=c.length();i>=0;i--)
{ if(!G[i].size())
continue;
for(int j=0;j<G[i].size();j++)
{cout<<G[i][j].first<<' '<<G[i][j].second<<endl;
}
break;
}
return 0;
}