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;
}

浙公网安备 33010602011771号