链接:https://ac.nowcoder.com/acm/contest/61132/G 来源:牛客网 给定一个长度为n的01串,你需要选择一段任意长度(可以为0)的区间对其翻转,翻转后,求最长的一段连续的全是1的区间的长度。c++生成
时间: 2024-04-13 20:26:02 浏览: 14
以下是使用C++编写的解决方案:
```cpp
#include <iostream>
#include <vector>
int max_ones(std::vector<int>& nums) {
int n = nums.size();
std::vector<int> dp(n, 0); // dp数组记录以当前位置结尾的最长连续1的长度
int max_len = 0; // 最长连续1的长度
for (int i = 0; i < n; i++) {
if (nums[i] == 1) {
dp[i] = (i > 0) ? dp[i-1] + 1 : 1; // 当前位置是1,更新dp数组
} else {
dp[i] = 0; // 当前位置是0,重置dp数组
}
max_len = std::max(max_len, dp[i]); // 更新最长连续1的长度
}
return max_len;
}
int main() {
int n; // 01串的长度
std::vector<int> nums;
std::cin >> n;
for (int i = 0; i < n; i++) {
int num;
std::cin >> num;
nums.push_back(num);
}
int result = max_ones(nums);
std::cout << result << std::endl;
return 0;
}
```
请将上述代码保存为一个.cpp文件,然后使用C++编译器进行编译运行。在运行时,首先输入01串的长度n,然后依次输入n个数字,每个数字代表对应位置的元素(0或1)。
注意:上述代码是根据题目描述编写的,但在实际使用中,应该添加输入数据的验证和错误处理机制。