CodeForces - 1271B Blocks
题意
给你一个有由W
和B
组成的字符串,你每次可以选择一对相邻字符进行翻转,问你最后能否让字符串变成只由一种字符组成
题目分析
贪心:遍历两次原串,第一次遇到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;
}