标签:long for false sum 情况 bit else force min
[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
标签:long for false sum 情况 bit else force min
原文地址:https://www.cnblogs.com/mch5201314/p/9365399.html