题目描述
给定一个长度为 n、元素由 0 或 1 组成的数组。
现在可以选择若干(可以为 0)个值为 0 的元素,将其修改为 1。
注:
x为数组中最长连续 1 子段的长度(规定,若所有数均为 0,则 x 为 0);
y 为修改的元素的个数。
求要怎么修改才能使 x−y 最大,并构造一个方案(输出修改后的数组)。
输入格式
本题含有多组数据。
第一行一个整数 T 表示数据组数。
接下来 2×T 行,每 2 行表示一组数据。
在一组数据中,第一行一个整数 n,表示数组的长度;
第二行 n 个整数(0 或 1),表示给定的数组。
输出格式
共 2×T 行,每 2 行表示一组数据。
在一组数据中,第一行输出一个整数表示 x−y 的最大值;
第二行 n 个整数(0 或 1)表示修改以后的数组。如有多个方案,任意输出一种即可。
输入输出样例
思路主要是:从 0修改为 1 的位置一定会属于最终序列的唯一的最长连续 1 子段( x-y最大值),所以全部改为 1。
代码出现了问题,还请帮看看
import itertools
T = int(input())
for i in range(T):
a = int(input())
b = input().split()
y = b.count("0")#统计y变化的个数
b = str(b)
b = b.replace("0","1")#求x数组中最长连续1子段的长度
x = max([len(list(v)) for k,v in itertools.groupby(b)])
print(x-y)
#麻烦主要是这几步,出现了问题
print(b.strip("[]"))