CodeForces 719B. Anatoly and Cockroaches
Posted mch5201314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces 719B. Anatoly and Cockroaches相关的知识,希望对你有一定的参考价值。
链接:
[http://codeforces.com/group/1EzrFFyOc0/contest/719/problem/B]
题意:
cockroaches;蟑螂。有两种颜色red和black。输入n,另一行输入n个字符,r代表red,b代表black,那个人喜欢蟑螂颜色交替排列。
你有两种操作:1.swap任意两个字符。2.你可以用颜料把某种颜色变成另一种颜色。为了满足那个人最少需要几个操作。
思路:
交替排列有两种情况:1.rbrbrb....。2.brbrbr...。分别计算这两种的操作数,取最小即可。关键是怎么计算?
sum1统计初始字符该是r却不是r的总数,sum2统计初始字符该是b却不是b的总数,具体看代码。两种情况都分别讨论。
统计完之后,
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,i,sum1=0,sum2=0,sum;
cin>>n;
string s,t;
cin>>s;
t=s;
for(i=0;i<n;i++)//brbrbr...情况
{
if(i%2){
if(s[i]!=‘r‘) sum1++;
}
else {
if(s[i]!=‘b‘) sum2++;
}
}
sum=abs(sum2-sum1)+min(sum1,sum2);//min(sum1,sum2)表示需要交换的操作数
sum1=0,sum2=0;//abs(sum2-sum1)表示不能交换只能通过染色的操作数
for(i=0;i<n;i++)//rbrbrb...情况
{
if(i%2){
if(s[i]!=‘b‘) sum1++;
}
else {
if(s[i]!=‘r‘) sum2++;
}
}
sum=min(sum,abs(sum2-sum1)+min(sum1,sum2));//曲最小
cout<<sum<<endl;
return 0;
}
以上是关于CodeForces 719B. Anatoly and Cockroaches的主要内容,如果未能解决你的问题,请参考以下文章
codeforces 719B:Anatoly and Cockroaches
CodeForces 719B Anatoly and Cockroaches (水题贪心)
Codeforces Round #719 (Div. 3) A - E 题解