思路:每一个D(或者R)都会消除下一个离他最近的R(D),以此类推,谁先为0,谁就输,根据这个进行模拟。
#include<bits/stdc++.h>
using namespace std;
char str[200005];
bool visit[200005];
int main()
{
int n,numd=0,numr=0;
scanf("%d%s",&n,str);
for(int i=0;i<n;i++)
{
if(str[i]=='D')
numd++;
else
numr++;
}
int flagd=0,flagr=0;
while(numd&&numr)
{
for(int i=0;i<n;i++)
{
if(str[i]=='D'&&!visit[i])
{
if(!flagr)
flagd++;
else
{
visit[i]=1;
flagr--;
numd--;
}
}
if(str[i]=='R'&&!visit[i])
{
if(!flagd)
flagr++;
else
{
visit[i]=1;
flagd--;
numr--;
}
}
}
}
if(numd) cout<<'D'<<endl;
else cout<<'R'<<endl;
return 0;
}

本文介绍了一种通过模拟算法解决DR游戏胜负问题的方法。该算法通过消除相邻且不同类型的字符来决定最终胜利者。文章详细展示了如何使用C++实现这一算法,并通过具体实例解释了算法的工作原理。
338

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



