#include<stdio.h>
#include<string.h>
void swap(char &a,char &b)
{
char temp;
temp=a;
a=b;
b=temp;
}
int main()
{
int n;
scanf("%d",&n);
char ar[n];
scanf("%s",ar);
int LEN_ar=(int)strlen(ar);
int posi_s=0;//银牌的位置
int count_s=0;//银牌的数量
int swap_count=0;
for(int i=0;i<LEN_ar;i++)
{
if(ar[i]=='S')
count_s++;
if(ar[i]=='G')
posi_s++;
}
int pos_sta_s=posi_s;// 第一个银牌开始的位置
int pos_end_s=posi_s+count_s-1;
//先对银牌进行操作
for(int i=pos_sta_s;i<=pos_end_s;i++)
{
if(ar[i]!='S')
{
if(ar[i]=='G')
{
int flag=0; //做一个标记看是否进入下边这个循环
for(int j=0;j<pos_sta_s;j++) //与银牌之前的位置交换
{
if(ar[j]=='S')
{
flag=1;
swap(ar[i], ar[j]);
swap_count++;
break;
}
}
if(flag==0)
for(int j=n-1;j>pos_end_s;j--)
{
if(ar[j]=='S')
{
swap(ar[i],ar[j]);
swap_count++;
break;
}
}
}
else if(ar[i]=='B')
{
int flag=0; //做标记
for(int j=n-1;j>pos_end_s;j--)
{
if(ar[j]=='S')
{
flag=1;
swap(ar[i],ar[j]);
swap_count++;
break;
}
}
if(flag==0)
for(int j=0;j<pos_sta_s;j++) //与银牌之前的位置交换
{
if(ar[j]=='S')
{
flag=1;
swap(ar[i], ar[j]);
swap_count++;
break;
}
}
}
}
}
for(int i=0;i<pos_sta_s;i++)
{
if(ar[i]!='G')
{
for(int j=pos_end_s+1;j<n;j++)
{
if(ar[j]=='G')
{
swap(ar[i], ar[j]);
swap_count++;
break;
}
}
}
}
//for(int i=0;i<n;i++)
// printf("%c ",ar[i]);
printf("%d",swap_count);
return 0;
}
P1219 【基础】奖牌整理c++代码
最新推荐文章于 2024-07-08 21:32:26 发布