CodeForce1363B. Subsequence Hate
思路
最终字符串只能形如00001111或1111000这样
所以枚举每个切分点i即可
对于切分点i不用关心,因为无论他是什么字符都可以划分到左侧或右侧
代码
#include<bits/stdc++.h>
using namespace std;
string s;
int main() {
int n_test;
cin >> n_test;
while (n_test--) {
cin >> s;
int n = s.length();
vector<int> left1(n), right1(n);
for (int i = 1; i < n; ++i) {
left1[i] = left1[i - 1] + (s[i - 1] == '1');
}
for (int i = n - 2; i >= 0; --i) {
right1[i] = right1[i + 1] + (s[i + 1] == '1');
}
int ans = n;
if (n > 1) {
for (int i = 1; i < n; ++i) {
auto left0 = i - left1[i];
auto right0 = n - 1 - i - right1[i];
// 00...001111
ans = min(ans, left1[i] + right0);
// 11...110000
ans = min(ans, left0 + right1[i]);
}
} else // n == 1
ans = 0;
printf("%d\n", ans);
}
}