CodeForces 1271B Blocks

CodeForces - 1271B Blocks

题意

给你一个有由WB组成的字符串,你每次可以选择一对相邻字符进行翻转,问你最后能否让字符串变成只由一种字符组成

题目分析

贪心:遍历两次原串,第一次遇到W就把它和它后面的元素翻转,看看最后能否变为只由B组;第二次与第一次类似,看看最后能否变成只由B组成。

AC代码

#include <bits/stdc++.h>
using namespace std;
int n;

inline void ch(string s, int op) {
    vector<int> v;
    auto f = [&](char &c) { c = c == 'B' ? 'W' : 'B'; };
    char c = op ? 'W' : 'B';
    for (int i = 0; i < n - 1; i++) {
        if (s[i] == c) {
            f(s[i]);
            f(s[i + 1]);
            v.push_back(i + 1);
        }
    }

    bool ok = 1;
    for (auto i : s) {
        if (i == c) {
            ok = 0;
            break;
        }
    }

    if (ok) {
        cout << v.size() << '\n';
        if (v.size()) for (auto i : v) cout << i << ' ';
        exit(0);
    }
}

int main()
{
    string s;
    cin >> n >> s;

    ch(s, 0);
    ch(s, 1);
    cout << "-1\n";

    return 0;
}
原文地址:https://www.cnblogs.com/FrankOu/p/15565670.html