题意:给一些在一排的蟑螂涂色或者两两交换位置,使最终的颜色交替出现,输出最小步数
枚举两种r和b在开头位置的情况,取最小,推一下计算公式就出来了
#include<cstring>
#include<string>
#include<iostream>
#include<queue>
#include<cstdio>
#include<algorithm>
#include<map>
#include<cstdlib>
#include<cmath>
#include<vector>
//#pragma comment(linker, "/STACK:1024000000,1024000000");
using namespace std;
#define INF 0x3f3f3f3f
char col[100006];
int n;
int solve(char c)
{
int sam=0,dif=0;
for(int i=0;i<n;i+=2)
{
if(col[i]==c) sam++;
}
for(int i=1;i<n;i+=2)
{
if(col[i]==c) dif++;
}
int ans=min((((n+1)/2)-sam),dif);
return dif+(((n+1)/2)-sam)-ans;
}
int main()
{
scanf("%d",&n);
scanf("%s",col);
int ans1=solve('r');
int ans2=solve('b');
printf("%d\n",min(ans1,ans2));
return 0;
}