题目大意:有一排蟑螂,只有r和b两种颜色,你可以交换任意两只蟑螂的位置,或涂改一个蟑螂的颜色,使其变成r和b交互排列的形式。问做少的操作次数。

题目思路:更改后的队列只有两种形式:长度为n以r开头;长度为n以b开头。与初始串进行比较并统计改变次数记作ans,算出必须进行的涂色操作的次数step,我们可以把交换两只不同颜色的蟑螂的位置看做进行了两次涂改操作,其次数为(ans-step)。

那么得出改变为模板串的最小操作次数为:step+(ans-step)/2;

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
#include<stdio.h>
#include<stdlib.h>
#include<queue>
#include<math.h>
#include<map>
#define INF 0x3f3f3f3f
#define MAX 1000005
#define Temp 1000000000 using namespace std; char str[MAX],t[MAX]; int change(int n,int k)
{
int op=k,rsum=,bsum=,r,b,ans=;
for(int i=;i<n;i++)//获取模板串
{
if(op==)
t[i]='r';
else
t[i]='b';
op*=-;
}
for(int i=;i<n;i++)//统计初始串r,b的数目,和模板串相较于初始串的改变次数
{
if(str[i]=='r')
rsum++;
else
bsum++;
if(str[i]!=t[i])
ans++;
}
if(k==)
{
if(n%==)
{
r=n/;
b=n/;
}
else
{
r=n/+;
b=n/;
}
}
else if(k==-)
{
if(n%==)
{
r=n/;
b=n/;
}
else
{
r=n/;
b=n/+;
}
}
int step=abs(r-rsum);//必须的涂色操作的次数
ans=step+(ans-step)/;
return ans;
} int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
scanf("%s",str);
int k1=change(n,);
int k2=change(n,-);
int ans=min(k1,k2);
printf("%d\n",ans);
}
return ;
}

最新文章

  1. rhel7报错整理
  2. Android应用:横竖屏切换总结
  3. avahi-daemon启动失败-解决方法-linux
  4. Android Bander设计与实现 - 设计篇
  5. POJ 1419
  6. &#39;String&#39; does not conform to protocol &#39;CollectionType&#39; Error in Swift 2.0
  7. 明晰三种常见存储技术:DAS、SAN和NAS
  8. Android实例-OrientationSensor方向传感器(XE8+小米2)
  9. Python创建list
  10. C# 网上收集的一些所谓的开源项目
  11. IOS开发中如何判断程序第一次启动(根据判断结果决定是否显示新手操作引导)
  12. 如何禁止App在后台运行以及如何保存和恢复App的状态
  13. 从javascript发展说到vue
  14. Fiddler使用教程(转)
  15. CSS面试复习(三):预处理器、工程化方案、三大框架中的CSS
  16. 详解shell编程中2&gt;&amp;1用法
  17. GC Root 对象有哪些
  18. windows下mysql配置(第一次)
  19. js布局库
  20. NYOJ 1073 最大值 (模拟)

热门文章

  1. 【LeetCode】462. Minimum Moves to Equal Array Elements II
  2. 2016弱校联盟十一专场10.2——Floyd-Warshall
  3. memcached在项目中的应用
  4. DX shader根据顶点设置颜色
  5. 如何安装VM Tool软件包
  6. LeetCode OJ 121. Best Time to Buy and Sell Stock
  7. mac brew install 搭建nginx php mysql
  8. 2015 ACM/ICPC Asia Regional Shenyang Online
  9. ural 1261. Tips(进制运算)
  10. C# 循环语句