n个蝗虫,共两种颜色,要求摆出rbr...或者brb...这种交错的样子,可以交换任意俩,或者改变一个的颜色,求操作最小次数。
//变换后的序列要么位brbr... 要么位rbrb...
//原序列和最终序列的某个位置不同 这个位置就肯定要操作一次
//统计错位位置
//若和b错位位置有5个,和r错位位置有3个 则应该交换3次 改变两次 即可
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int M=201000;
char s[M];
int a[M];
int main()
{
int n;
while(cin>>n)
{
int ans=0;
scanf("%s",s);
//可以交换任意俩,或者改变一个的颜色,求操作最小次数
//变换后的序列要么位brbr... 要么位rbrb...
//原序列和最终序列的某个位置不同 这个位置就肯定要操作一次
//统计错位位置
//若和b错位位置有5个,和r错位位置有3个 则应该交换3次 改变两次 即可
int t1=0,t2=0;
for(int i=0;i<n;i++)//brbrbrb
{
if(i%2==0)
{
if(s[i]!='b')
t1++;
}
else
{
if(s[i]!='r')
t2++;
}
}
ans=max(t1,t2);
int cnt=0;
t1=t2=0;
for(int i=0;i<n;i++)//rbrbrbr
{
if(i%2)
{
if(s[i]!='b')
t1++;
}
else
{
if(s[i]!='r')
t2++;
}
}
cnt=max(t1,t2);
cout<<min(ans,cnt)<<endl;
}
return 0;
}
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
const int M=201000;
char s[M];
int a[M];
int main()
{
int n;
while(cin>>n)
{
int ans=0;
scanf("%s",s);
//可以交换任意俩,或者改变一个的颜色,求操作最小次数
//变换后的序列要么位brbr... 要么位rbrb...
//原序列和最终序列的某个位置不同 这个位置就肯定要操作一次
//统计错位位置
//若和b错位位置有5个,和r错位位置有3个 则应该交换3次 改变两次 即可
int t1=0,t2=0;
for(int i=0;i<n;i++)//brbrbrb
{
if(i%2==0)
{
if(s[i]!='b')
t1++;
}
else
{
if(s[i]!='r')
t2++;
}
}
ans=max(t1,t2);
int cnt=0;
t1=t2=0;
for(int i=0;i<n;i++)//rbrbrbr
{
if(i%2)
{
if(s[i]!='b')
t1++;
}
else
{
if(s[i]!='r')
t2++;
}
}
cnt=max(t1,t2);
cout<<min(ans,cnt)<<endl;
}
return 0;
}