【31.58%】【codeforces 719B】 Anatoly and Cockroaches
1 second
256 megabytes
standard input
standard output
Anatoly lives in the university dorm as many other students do. As you know, cockroaches are also living there together with students. Cockroaches might be of two colors: black and red. There are n cockroaches
living in Anatoly's room.
Anatoly just made all his cockroaches to form a single line. As he is a perfectionist, he would like the colors of cockroaches in the line toalternate. He has a can of black paint and a can of
red paint. In one turn he can either swap any two cockroaches, or take any single cockroach and change it's color.
Help Anatoly find out the minimum number of turns he needs to make the colors of cockroaches in the line alternate.
The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) —
the number of cockroaches.
The second line contains a string of length n, consisting of characters 'b'
and 'r' that denote black cockroach and red cockroach respectively.
Print one integer — the minimum number of moves Anatoly has to perform in order to make the colors of cockroaches in the line to alternate.
5
rbbrr
1
5
bbbbb
2
3
rbr
0
In the first sample, Anatoly has to swap third and fourth cockroaches. He needs 1 turn to do this.
In the second sample, the optimum answer is to paint the second and the fourth cockroaches red. This requires 2 turns.
In the third sample, the colors of cockroaches in the line are alternating already, thus the answer is 0.
【题解】
这不是道广搜题0 0
可以很容易想到目标序列有两种
1和0分别代表两种不同颜色;
1.以1开头
2.以0开头
构造出这样的目标序列。
然后把所给的初始序列和目标序列对比。
一出现某个位置x不一样就先尝试把
初始序列的x位置上的东西换成目标序列的颜色colorx。
但是换的条件是。换之后。要确定colorx是小于等于目标序列的colorx的颜色个数。
否则就不换.
最后我们可以保证改变之后的序列的两种颜色的数目和目标序列的两种颜色的数目是一样的。
然后如果再有不同就进行交换操作(肯定比单个改变优);
110
101
可以以这个例子看到。进行一次交换必有两个位置都配对了。
可以想象。最后两种颜色都与目标序列的两种颜色数目相同了。
则肯定交换swap操作所需要的数目更少。
就是这样吧。
自己看代码;
【代码】
#include <cstdio>
#include <algorithm>
#include <bitset> using namespace std; const int MAXN = 109000; char s[MAXN];
int len;
long long final_ans = -1;
bitset <MAXN> a, temp, b; void input_data()
{
scanf("%d", &len);
scanf("%s", s);
for (int i = 1; i <= len; i++)
if (s[i - 1] == 'b')
a[i] = 0;
else
a[i] = 1;
} void get_ans(bool chushi)
{
long long temp_ans = 0;
temp = a;
b[1] = chushi;
for (int i = 2; i <= len; i++)
b[i] = !b[i - 1];
int c1[2], c2[2], tc1[2];
c1[1] = temp.count();
c2[1] = b.count();
c1[0] = len - c1[1];
c2[0] = len - c2[1];
for (int i = 1; i <= len; i++)
if (temp[i] != b[i])
{
for (int i = 0; i <= 1; i++)
tc1[i] = c1[i];
int pre = abs(tc1[0] - tc1[1]);
tc1[b[i]]++;
tc1[!b[i]]--;
if (tc1[b[i]] <= c2[b[i]])//如果改变之后这种颜色的数目小于等于目标序列这种颜色数目
{//则这个改变是最优的。
temp[i] = b[i];
for (int i = 0; i <= 1; i++)
c1[i] = tc1[i];
temp_ans++;
}
}
int t2 = 0;
for (int i = 1; i <= len; i++)//如果还存在不同的。就进行交换操作。
if (temp[i] != b[i])
t2++;
t2 /= 2;//交换可以修正两个不同的位置不匹配;
temp_ans += t2;
if (final_ans == -1)
final_ans = temp_ans;
else
final_ans = min(final_ans, temp_ans);
} void output_ans()
{
printf("%I64d\n", final_ans);
} int main()
{
//freopen("F:\\rush.txt", "r", stdin);
input_data();
get_ans(0);
get_ans(1);
output_ans();
return 0;
}
【31.58%】【codeforces 719B】 Anatoly and Cockroaches的更多相关文章
- codeforces 719B:Anatoly and Cockroaches
Description Anatoly lives in the university dorm as many other students do. As you know, cockroaches ...
- 【31.58%】【codeforces 682D】Alyona and Strings
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【 BowWow and the Timetable CodeForces - 1204A 】【思维】
题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...
- 【31.72%】【codeforces 604B】More Cowbell
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- 【21.58%】【codeforces 746D】Green and Black Tea
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【58.33%】【codeforces 747B】Mammoth's Genome Decoding
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- 【中途相遇法】【STL】BAPC2014 K Key to Knowledge (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- 【codeforces 785D】Anton and School - 2
[题目链接]:http://codeforces.com/contest/785/problem/D [题意] 给你一个长度为n的括号序列; 让你删掉若干个括号之后,整个序列变成前x个括号为左括号,后 ...
- 【30.23%】【codeforces 552C】Vanya and Scales
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
随机推荐
- GetListToJson
List<Models.ArticleModel> list = GetList(page); return Newtonsoft.Json.JsonConvert.Serializ ...
- WEB安全实战(二)带你认识 XSS 攻击
前言 上一篇文章写了关于 WEB 安全方面的实战,主要是解决 SQL 盲注的安全漏洞.这篇文章本来是要写一篇关于怎样防治 XSS 攻击的,可是想来想去,还是决定先从理论上认识一下 XSS 吧.下一篇文 ...
- javaScript实现选中文字提示新浪微博分享的效果
<!DOCTYPE html> <html xmlns:wb="http://open.weibo.com/wb"> <head> <me ...
- body{display:none}
body{display:none} 使浏览器不显示内容,用这样的代码删除 $document = str_replace('body{display:none}','',$document);
- 1.2 Use Cases中 Metrics官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Metrics 指标 Kafka is often used for operati ...
- 1.10 Python基础知识 - 序列:列表
在Python中有很多的组合数据类型,其中包括列表,元组,字符串等数据类型,这些数据类型统称为序列类型,用他们可以处理复杂的数据. 列表,是一组有序元素组合的数据结构.列表是可变的数据类型. 列表采用 ...
- 关于程序中delay函数带来的繁琐问题
导致“滴滴”声音不准确的原因是因为,串口屏幕发送信息的时候会有delay() 的延迟. 得到的教训就是,无论在什么地方,最好都不要加delay的延迟.否则含有delay的子 函数加入到其他模块中,就会 ...
- (素材源代码) 猫猫学IOS(五)UI之360等下载管理器九宫格UI
猫猫分享,必须精品 先看效果 代码学习地址: 猫猫学IOS(五)UI之360等下载管理器九宫格UI 猫猫学IOS(五)UI之360等下载管理器九宫格UI http://blog.csdn.net/u0 ...
- Android 调用系统邮件,发送邮件到指定邮箱
在项目中,最后有一个联络我们,要求是点击号码还有邮箱地址能够发送邮件,这时候解决的方案其实有两种,一种是调用系统发邮件的软件,可以添加邮箱账号就可以发送邮件:第二种是使用javamail来发送邮件.在 ...
- HDU 2587 - 很O_O的汉诺塔
看题传送门 吐槽题目 叫什么很O_O的汉诺塔我还@.@呢. 本来是想过一段时间在来写题解的,不过有人找我要. 本来排名是第8的.然后搞了半天,弄到了第五.不过代码最短~ 截止目前就9个ID过,小小的成 ...