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;
}

猜你喜欢

转载自www.cnblogs.com/mch5201314/p/9365399.html
今日推荐