s = input().strip()n = len(s)dp = [[float('inf')]*2 for _ in range(n+1)]dp[0][0] = dp[0][1] = 0for i in range(1, n+1): if s[i-1] == '0': dp[i][0] = min(dp[i-1][0], dp[i-1][1]+1) elif s[i-1] == '1': dp[i][1] = min(dp[i-1][1], dp[i-1][0]+1) else: dp[i][0] = min(dp[i-1][0], dp[i-1][1]+1) dp[i][1] = min(dp[i-1][1], dp[i-1][0]+1)ans = [''] * nif dp[n][0] <= dp[n][1]: i, j = n, 0 while i > 0: if s[i-1] == '0': ans[i-1] = '0' i, j = i-1, 0 elif s[i-1] == '1': ans[i-1] = '1' i, j = i-1, 1 else: if dp[i][j] == dp[i-1][0]: ans[i-1] = '0' i, j = i-1, 0 else: ans[i-1] = '1' i, j = i-1, 1else: i, j = n, 1 while i > 0: if s[i-1] == '0': ans[i-1] = '0' i, j = i-1, 0 elif s[i-1] == '1': ans[i-1] = '1' i, j = i-1, 1 else: if dp[i][j] == dp[i-1][1]: ans[i-1] = '1' i, j = i-1, 1 else: ans[i-1] = '0' i, j = i-1, 0print(''.join(ans))修改为c++代码
时间: 2024-01-25 12:05:12 浏览: 69
vue中使用input[type="file"]实现文件上传功能
5星 · 资源好评率100%
好的,以下是修改后的 C++ 代码:
```
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
string s;
cin >> s;
int n = s.size();
vector<vector<int>> dp(n+1, vector<int>(2, 1e9));
dp[0][0] = dp[0][1] = 0;
for (int i = 1; i <= n; i++) {
if (s[i-1] == '0') {
dp[i][0] = min(dp[i-1][0], dp[i-1][1]+1);
} else if (s[i-1] == '1') {
dp[i][1] = min(dp[i-1][1], dp[i-1][0]+1);
} else {
dp[i][0] = min(dp[i-1][0], dp[i-1][1]+1);
dp[i][1] = min(dp[i-1][1], dp[i-1][0]+1);
}
}
vector<char> ans(n);
if (dp[n][0] <= dp[n][1]) {
int i = n, j = 0;
while (i > 0) {
if (s[i-1] == '0') {
ans[i-1] = '0';
i--, j = 0;
} else if (s[i-1] == '1') {
ans[i-1] = '1';
i--, j = 1;
} else {
if (dp[i][j] == dp[i-1][0]) {
ans[i-1] = '0';
i--, j = 0;
} else {
ans[i-1] = '1';
i--, j = 1;
}
}
}
} else {
int i = n, j = 1;
while (i > 0) {
if (s[i-1] == '0') {
ans[i-1] = '0';
i--, j = 0;
} else if (s[i-1] == '1') {
ans[i-1] = '1';
i--, j = 1;
} else {
if (dp[i][j] == dp[i-1][1]) {
ans[i-1] = '1';
i--, j = 1;
} else {
ans[i-1] = '0';
i--, j = 0;
}
}
}
}
for (int i = 0; i < n; i++) {
cout << ans[i];
}
cout << endl;
return 0;
}
```
注意,由于 C++ 中的 vector 下标从 0 开始,因此需要将所有下标减 1。同时,C++ 中的字符数组 vector<char> 的默认值为 0,因此不需要手动初始化为 '0'。
阅读全文