题意:有两组人D和R,一次轮流投票,D的人可以说R里面的某个人不能投,也可以什么都不做,R里面的同理
//贪心:轮到第i人(D)投票时,应选择把下一个能做决策的对手X(R)淘汰(既淘汰掉一个人,又防止下一个D被淘汰,即可能又多了一次淘汰(R)的机会)
//RDRDDRD ->RDD->D Win:D
//用队列模拟即可
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> P;
const int inf=1e9;
const int N=2e5+20;
char s[N];
int main()
{
int n;
while(cin>>n)
{
queue<int> d,r;
scanf("%s",s+1);
for(int i=1;i<=n;i++)
{
if(s[i]=='D')
d.push(i);
else
r.push(i);
}
while(!d.empty()&&!r.empty())
{
int x=d.front(),y=r.front();
//小的先做决策
if(x<y)
{
r.pop();//淘汰
d.pop();//做完决策后等待下一轮
d.push(x+n);
}
else
{
d.pop();
r.pop();
r.push(y+n);
}
}
if(d.empty())
puts("R");
else
puts("D");
}
return 0;
}

本文介绍了一个有趣的投票博弈问题,两组参与者D和R通过轮流投票的方式进行对决,目标是尽可能多地淘汰对方成员。文章详细解释了贪心策略的应用,即在每次决策中优先淘汰能够继续做出决策的对手成员,从而最大化自己一方的胜算。并通过队列模拟实现了这一策略。
589

被折叠的 条评论
为什么被折叠?



