题意简述
在一个
2
行
分析
记第一行的雷分布情况为 ai ,第二行的标数情况为 bi ,则有 ai=bi−1−ai−2−ai−1 。又因为 bi 是钦定的,所以只要确定 a1 和 a2 就能确定第一行的情况了。
实现
根据 b1 确定 a1 和 a2 ,再判断 ai 是不是属于 {0,1} 即可。
代码
#include <cstdio>
int const N=1e4+10;
int n,x[N]; int a[N];
int check()
{
for(int i=2;i<=n-1;i++)
{
a[i+1]=x[i]-a[i-1]-a[i];
if(a[i+1]!=0 && a[i+1]!=1) return 0;
}
if(a[n-1]+a[n]==x[n]) return 1;
else return 0;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&x[i]);
if(x[1]==0) a[1]=0,a[2]=0;
else if(x[1]==1) a[1]=1,a[2]=0;
else if(x[1]==2) a[1]=1,a[2]=1;
int ans=check();
if(x[1]==1) a[1]=0,a[2]=1,ans+=check();
printf("%d\n",ans);
return 0;
}
注意
bn 需要特判一下。