并非一道贪心题而是模拟题。
只需要先枚举一遍第一个字符为1的情况,然后再枚举一遍第一个字符为0的情况,然后答案取最小值即可。
#include<iostream>
#include<cstdio>
#include<cstring>
#pragma warning (disable:4996)
using namespace std;
const int N = 1e5 + 10;
char str[N];
int main() {
scanf("%s", str + 1);
int n = strlen(str + 1);
int res = 0;
int ans = 0;
for (int i = 1; i <= n; i++) {
if (i & 1) {//奇
if (str[i] != '0') res += i;
}
else {
if (str[i] != '1') res += i;
}
}
for (int i = 1; i <= n; i++) {
if (i & 1) {
if (str[i] != '1') ans += i;
}
else {
if (str[i] != '0') ans += i;
}
}
res = min(res, ans);
cout << res << endl;
return 0;
}