此题的题解是运用递推式 由开始推到结尾,而满足题目的要求,在第一列只有0或1的情况,只要有一个大于1就错了,因为不可能放两个雷,最后还有一次特判,因为最后一次没有判断到。

# include <iostream>
using namespace std;
const int N=10010;
int a[N];
int mine[N];
int n;
int ans=0;
int main(){
    cin>>n;
    for(int i=0;i<n;i++) cin>>a[i];
    for(int k=0;k<2;k++){
        mine[0]=k;
        mine[1]=a[0]-mine[0];
        if(mine[1]<0||mine[1]>1) continue;
        int flag=0;
        int i;
        for(i=1;i<n-1;i++){
            mine[i+1]=a[i]-mine[i]-mine[i-1];
            if(mine[i+1]<0||mine[i+1]>1) flag=1;
        }
        if(mine[i]+mine[i-1]!=a[i]) flag=1;
        if(flag) continue;
        else ans++;
    }
    cout<<ans<<endl;
    return 0;
}

总结: 我这题居然想用的是模拟,太蒟蒻了,反而显现的很麻烦,其实有些题需要从题目中分析再在样例中可以发现某些规律。。。。