此题的题解是运用递推式 由开始推到结尾,而满足题目的要求,在第一列只有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; }
总结: 我这题居然想用的是模拟,太蒟蒻了,反而显现的很麻烦,其实有些题需要从题目中分析再在样例中可以发现某些规律。。。。