男女


DD 的班级里,男女生互相有意见,现在 \(n\) 个人排成一圈,如果 \(g_i\)
'b'表示是男生,如果为'g'表示为女生,大家依次按顺序指定一个异性退出游戏,如果某人退出了游戏,轮到 ta 的时候就直接跳过。如果到某一个性别一个人都没有了,则称为另一性别胜利。现在给定这 \(n\) 个人的性别,所有人都会用理想策略指定人退出游戏,问最后哪个性别会胜利,胜利的一方剩下几个人?

输入格式
第一行给定一个整数 \(n\) 表示人数

第二行 \(n\) 个字母,\(g_i\) 表示第 \(i\) 个人的性别

输出格式
若男生赢输出 B,若女生赢输出G,然后空一格输出一个整数表示胜利的一方剩下的人数。

数据范围
对于 \(30\%\) 的数据,\(1 \leq n \leq 20\)

对于另外 \(20\%\) 的数据,保证 \(g_i \neq g_{i-1}(1 < i \leq n)\)

对于 \(100\%\) 的数据,\(1 \leq n \leq 200000\)

输出时每行末尾的多余空格,不影响答案正确性

样例输入

4
BGGB

样例输出

B 1

一个模拟题。

我们要杀人的时候可以不用立刻杀,考虑先记着有多少个男生多少个女生被杀后没有立刻杀的,如果不为0那就把轮到那个人杀了,个数减1.否则对方个数加1.

具体模拟可以用队列或循环链表。一但有一个性别被杀完了那就输出另一个性别。

#include
#include
#include
using namespace std;
const int N=2e5+5;
int n;
char c[N];
bool die[N];
bool t[N];
int cnt[2];
int sum[2];
queueq;
int main()
{
	cin>>n;
	scanf("%s",c);
	for(int i=1;i<=n;i++)
		t[i]=(c[i-1]=='B');
	for(int i=1;i<=n;i++)
	{
		sum[t[i]]++;
		q.push(i);
	}
	while(1)
	{
		if(sum[1]==0)
		{
			cout<<"G "<