Codeforces 749C Voting 题解
题目
原题链接
题意
- 有n名议员,分属两个党派,简称R党和D党,按照输入的顺序发言,发言时不能投票,但可以让别人无法投票,一轮结束后循环,直到剩下最后一人可以投票,他会投出自己党派的一票。
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
char str[n+1];
scanf("%s",str);
queue<int> R,D;
for (int i=0;i<n;i++){
if (str[i]=='R')
R.push(i);
else D.push(i);
}
while (!R.empty()&&!D.empty()){
if (R.front()<D.front())
R.push(D.front()+n);
else
D.push(R.front()+n);
R.pop();
D.pop();
}
if (R.empty())
cout<<'D'<<endl;
else cout<<'R'<<endl;
return 0;
}
思路
- 使用两个队列记下对应党派人士出场次序,比较队列前端,如果某党人士比另一党人士序号小,即先出场,该人放至队尾,进入下一轮循环,同时将两组队列队首弹出,循环此步骤直到两队中任意一队空,输出非空队列所在党派的标号。
总结
- 本题1600分,比较简单的队列模拟题,看懂题意,抓住先出场让后出场异党派人士出局无法投票这一点即可。