Educational Codeforces Round 128 (Rated for Div. 2) C
C. Binary String(双指针)
链接
题意:给出01字符串,可以删除开头的连续和结尾的连续,最后的价值是删除的1的个数和剩下的0的个数的max
思路:很明显,这个0的价值具有单调性,所以我们用双指针☞一下就完了
#include<bits/stdc++.h>
using namespace std;
int s[300010], n;
int get(int l, int r)
{
return max(s[l] + (s[n] - s[r - 1]), s[l] + r - l - 1 - s[r - 1]);
}
int main()
{
int T;
cin >> T;
while (T--) {
string ss;
cin >> ss;
n = ss.length();
for (int i = 1; i <= n; i++) {
s[i] = (ss[i - 1] == '1');
s[i] += s[i - 1];
}int ans = n;
for (int l = 0, r = 1; l < n; l++) {
while (r <= l || (r <= n && get(l, r + 1) <= get(l, r))) r++;
ans = min(ans, get(l, r));
}cout << ans << endl;
}
return 0;
}