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 719B

Codeforces Round #719 (Div. 3) A - E 题解

Codeforces 719E [斐波那契区间操作][矩阵快速幂][线段树区间更新]

Codeforces Round #719 (Div. 3) ABCDEF题解