题目链接:http://codeforces.com/problemset/problem/719/B

题目大意:

  有一队蟑螂用字符串表示,有黑色 ‘b’ 和红色 'r' 两种颜色,你想使这队蟑螂颜色分布是交叉的,你有两种做法:

    一次调整任意两个交换位置,或者一次给一个蟑螂染色

  问,最少操作多少次可以使得蟑螂的颜色分布是交叉的。

解题思路:

  刚看完题,就想到用一个字符接受第一个蟑螂的颜色【下标从0开始】,for 如果 是奇数则 应该与第一蟑螂的颜色不同,如果相同 ++c1,如果是偶数,就应该与第一个蟑螂的颜色相同,否则++c2。然后找 max(c1,c2)-》c1 要与 c2相匹配的次数+剩余的部分是用燃料涂色的次数,即找到c1 c2中的最大值即可。

  说了这么多可惜上面的思路只是对了一大半。0.o

  如果按照上面的思路,操作的次数要取决于第一个字符,如果【修改第一个比按第一个计算存在更少的情况,答案就会出问题】,解决方法:自定义第一元素【存在两种可能 ‘r’ ‘b’ 】,然后按照上面的方法从第一元素比较(下标 0),得到结果,将两种结果找到一较小值即是最终答案。

AC Code:

 #include<bits/stdC++.h>
using namespace std;
char ca[];
int solve(char c,int n)
{
int c1=,c2=;
for(int i=; i<n; i++)
{
if(c=='r')
{
if(i&&&ca[i]!='r')
++c1;
else if((!(i&))&&ca[i]!='b')
++c2;
}
else
{
if(i&&&ca[i]!='b')
++c1;
else if((!(i&))&&ca[i]!='r')
++c2;
}
}
return max(c1,c2);
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
scanf("%s",ca);
cout<<min(solve('r',n),solve('b',n))<<endl;
}
return ;
}

Codeforces 719B Anatoly and Cockroaches(元素的交叉排列问题)的更多相关文章

  1. Codeforces 719B Anatoly and Cockroaches

    B. Anatoly and Cockroaches time limit per test:1 second memory limit per test:256 megabytes input:st ...

  2. CodeForces 719B Anatoly and Cockroaches 思维锻炼题

    题目大意:有一排蟑螂,只有r和b两种颜色,你可以交换任意两只蟑螂的位置,或涂改一个蟑螂的颜色,使其变成r和b交互排列的形式.问做少的操作次数. 题目思路:更改后的队列只有两种形式:长度为n以r开头:长 ...

  3. CodeForces 719B Anatoly and Cockroaches (水题贪心)

    题意:给定一个序列,让你用最少的操作把它变成交替的,操作有两种,任意交换两种,再就是把一种变成另一种. 析:贪心,策略是分别从br开始和rb开始然后取最优,先交换,交换是最优的,不行再变色. 代码如下 ...

  4. Codeforces Round #373 (Div. 2) B. Anatoly and Cockroaches 水题

    B. Anatoly and Cockroaches 题目连接: http://codeforces.com/contest/719/problem/B Description Anatoly liv ...

  5. Codeforces Round #373 (Div. 2) Anatoly and Cockroaches —— 贪心

    题目链接:http://codeforces.com/contest/719/problem/B B. Anatoly and Cockroaches time limit per test 1 se ...

  6. B. Anatoly and Cockroaches

    B. Anatoly and Cockroaches time limit per test 1 second memory limit per test 256 megabytes input st ...

  7. justify-content 定义子元素在父元素水平位置排列的顺序

    justify-content 定义子元素在父元素水平位置排列的顺序,需要和display:flex使用才会生效. 有五个属性: 1.flex-start(默认值)  左对齐 2.flex-end 右 ...

  8. 求一个集合S中m个元素的所有排列以及一个数组A的全排列—递归实现版完整代码

    说明,本文全文代码均用dart语言实现. 求一个集合S中m个元素的所有排列情况,并打印,非常适合用递归的思路实现.本文给出了两种实现方法,一种是给定的填充排列数组长度是固定的,一种是可变长度的.两种方 ...

  9. codeforces 719B:Anatoly and Cockroaches

    Description Anatoly lives in the university dorm as many other students do. As you know, cockroaches ...

随机推荐

  1. VS2015中GLAUX库的链接问题

    最近学习OpenGL,照着例子写了个程序,用到了GLAUX库. #include <gl\glaux.h> #pragma comment(lib, "glaux") ...

  2. Ubuntu 完全卸载Apache2

    安装时候使用的一键安装,很简单 apt-get install apache2 这两天想配置一个lighttpd,但是一直不能成功,今天在公司用虚拟机里面的Ubuntu 配置lighttpd成功了,怀 ...

  3. ScrollView内部元素如何做到fill_parent 或者 match_parent?

    转  : http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0704/1629.html ScrollView滚动视图是指当拥有很多 ...

  4. 引入AOP 报错 error at ::0 formal unbound in pointcut

    使用了AOP 后启动报错 九月 27, 2016 2:29:46 下午 org.springframework.context.support.AbstractApplicationContext r ...

  5. bzoj2821: 作诗(Poetize)

    分块 分sqrt(n)块 F[i][j]表示块i到块j的答案 s[i][j]表示数字i在前j块内出现了几次 #include <iostream> #include <cstdio& ...

  6. python 模块的介绍(一)

    模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个 模块里能让你的代码更好用,更易懂. 模块也是Python对象,具有随机的名字属性用来绑定或引用. 简单地说,模块就是一个保存了 ...

  7. 又爱又恨系列之枚举enum

    其实枚举挺简单的,只不过以前没好好学,所以不知道这个东西,恩,现在梳理一下 整体而言,首先枚举是一个数据类型,这个数据类型和结构体有点像 可以分为三个层次 1.枚举数据类型定义 第一种:enum 枚举 ...

  8. js-JavaScript高级程序设计学习笔记18

    第21章 AJAX 4.跨域源资源共享 CORS跨域源资源共享,其背后思想,是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是否应该成功. 1.IE对CORS的实现 在IE8中引 ...

  9. Linux 输出重定向>和>>的区别

    >是定向输出到文件,如果文件不存在,就创建文件:如果文件存在,就将其清空:一般我们备份清理日志文件的时候,就是这种方法:先备份日志,再用`>`,将日志文件清空(文件大小变成0字节): &g ...

  10. 【poj3709】 K-Anonymous Sequence

    http://poj.org/problem?id=3709 (题目链接) 题意 给出一个n个数的序列,要求将其中一些数改为另一个比它小的数,改动的花费为两数的绝对值,完成改动后使得整个序列中出现过的 ...