题解:
首先枚举第一个有木有雷
然后第二个可以通过第一个推,第三个也是
以此类推
最后判断是否合法
代码:
#include<bits/stdc++.h> using namespace std; int a[10005],b[10005],n; int pd(int x) { memset(b,0,sizeof b); b[1]=x; b[2]=a[1]-x; for (int i=3;i<=n;i++)b[i]=a[i-1]-b[i-1]-b[i-2]; for (int i=1;i<=n;i++) if (b[i]>1||b[i]<0)return 0; return b[n]+b[n-1]==a[n]; } int main() { scanf("%d",&n); for (int i=1;i<=n;i++)scanf("%d",&a[i]); printf("%d",pd(1)+pd(0)); }