贪心题,先关掉那些管一个灯造福两个寝室的,然后一边关灯一边统计一边继续向后判断。最后加上那些依然还受影响的寝室数(只要受影响我一定要关一盏灯),不废话,看代码;

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e5+6;
int a[maxn];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
int cnt=0;
for(int i=1;i<=n;i++){
if(a[i]==0&&a[i-1]==1&&a[i+1]==1&&a[i+2]==0&&a[i+3]==1){
a[i+1]=0;
cnt++;
//cout<<i+1<<endl;
}
}
for(int i=1;i<=n;i++){
if(a[i]==0&&a[i-1]==1&&a[i+1]==1)cnt++;
}
cout<<cnt<<endl;
}