容易发现只有左右两边都是0的时候才能修改为1,否则必定和左右两边任意一个1相邻,然后贪心地修改为1,只需要判断可以被执行的位置数量超过m没有即可
#include <bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int N=2e5+7;
const int M=1e9;
typedef long long ll;
typedef pair<int,int> pii;
int n,s[N],b[N];
ll m,k,ans;
void solve(){
cin>>n;
rep(i,1,n)cin>>s[i];
cin>>k;
rep(i,1,n-1){
if(!s[i] && !s[i-1] && !s[i+1]){
s[i]=1;
k--;
if(k<0){
cout<<"true";
return;
}
}
}
cout<<"false";
}
int main(){
ios::sync_with_stdio(false),cin.tie(0);
int tt=1;
//cin>>tt;
while(tt--)solve();
return 0;
}

京公网安备 11010502036488号