> 文档中心 > 生成交替二进制串所需最少步数(代码很琐碎)

生成交替二进制串所需最少步数(代码很琐碎)

#include#include#includeusing namespace std;const int N = 100010;int dp1[N];int dp2[N];char arr1[N];char arr2[N];int main(){cin >> arr1 + 1;int len = strlen(arr1 + 1);for (int i = 1; i <= len; i++) arr2[i] = arr1[i];dp1[1] = 0;dp2[1] = 1;for (int i = 2; i <= len; i++) {if (arr1[i] == arr1[i - 1]) {dp1[i] = dp1[i - 1] + 1;if (arr1[i] == '1')arr1[i] = '0';elsearr1[i] = '1';}elsedp1[i] = dp1[i - 1];}arr2[1] = (arr2[1] == '0') ? '1' : '0';for (int i = 2; i <= len; i++) {if (arr2[i] == arr2[i - 1]) {dp2[i] = dp2[i - 1] + 1;if (arr2[i] == '1')arr2[i] = '0';elsearr2[i] = '1';}elsedp2[i] = dp2[i - 1];}int ans = min(dp1[len], dp2[len]);cout << ans;return 0;}