【题解】洛谷 P7285 「EZEC-5」修改数组
思路一
对于一个当前全部为
因此,一种最优的区间即为
思路二
一个显然的结论:被我们从
因此,
代码
思路一
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int cnt=0;//记录 1 的个数
for(int i=1;i<=n;++i)
{
int x;
scanf("%d",&x);
cnt+=x;
}
printf("%d\n",cnt);
for(int i=1;i<=n;++i)
printf("1%c",i<n?' ':'\n');
}
return 0;
}
思路二
#include<bits/stdc++.h>
using namespace std;
const int max_n=1e5+5;
int a[max_n];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int cnt=0;//记录 1 的个数
for(int i=1;i<=n;++i)
{
scanf("%d",a+i);
cnt+=a[i];
}
printf("%d\n",cnt);
int l=1,r=0;//若不存在 1,则不用修改
for(int i=1;i<=n;++i)
{
if(a[i])
{
l=i;
break;
}
}
for(int i=n;i>=1;--i)
{
if(a[i])
{
r=i;
break;
}
}
for(int i=l;i<=r;++i)
a[i]=1;
for(int i=1;i<=n;++i)
printf("%d%c",a[i],i<n?' ':'\n');
}
return 0;
}
PS:若题目要求