CodeForces - 719B CodeForces - 719A(思维+贪心)

题目:传送门
思路: 因为我们要保证颜色交错,那么给定我一个序列后,就只有两种可以满足条件的最终序列,即以’R’颜色开头和以‘B’颜色开头,所以我们把两种情况分别讨论一下,取最小值即可。
在计算某种情况下需要的操作数时,如何第 i 位的颜色一样,我们当然最优考虑是不管它,如果不同,我们就统计不同时这个位置是 R 或是 B 的个数hr,hb。因为需要b的位置(这个位置上是R)有hr 个,需要r的位置(这个位置上是B)有hb个,我们可以交换的个数就是 m = min(hr,hb) ,剩下的就是需要改变颜色的次数,二者相加,刚好为hr , hb 的最大值!

#include <iostream>
using namespace std;
string sta="rb";
int hr,hb,ans;
int main() {
    int n;
    cin>>n;
    string s;
    cin>>s;
    ans = 1e9;
    hr=0,hb=0;
    for(int i=0;i<s.size();i++) {
        if(s[i] != sta[i%2]) {
            if(s[i]=='r') {
                hr++;
            }
            else {
                hb++;
            }
        }
        else continue;
    }
    ans = min(ans,max(hr,hb));
    hr = 0;
    hb = 0;
    for(int i=0;i<s.size();++i) {
        if(s[i] != sta[(i+1)%2]) {
            if(s[i]=='r') {
                hr++;
            }
            else {
                hb++;
            }
        }
        else continue;
    }
    ans = min(ans,max(hr,hb));
    cout<<ans<<endl;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43305984/article/details/88985634