LuoguP7285 「EZEC-5」修改数组 题解

Content

有一个长度为 \(n\)\(0/1\) 串,你可以修改当中的一些元素,求修改后最长的连续为 \(1\) 的子串长度减去修改次数的最大值。

数据范围:\(1\leqslant n\leqslant 10^5\)

Solution

我们不难发现,将所有的 \(0\) 修改成 \(1\) 所能得到的答案一定是最大的,因为每次将 \(0\) 修改成 \(1\) 一定会将答案变大或者不变。

Code

int t, n, a[100007];

int main() {
	scanf("%d", &t);
	while(t--) {
		int cnt0 = 0;
		scanf("%d", &n);
		for(int i = 1; i <= n; ++i) scanf("%d", &a[i]), cnt0 += (a[i] == 0);
		printf("%d\n", n - cnt0);
		for(int i = 1; i <= n; ++i) printf("1 ");
		puts("");
	}
	return 0;

}
posted @ 2021-12-16 14:32  Eason_AC  阅读(116)  评论(0)    收藏  举报