您的位置:首页 > 其它

BZOJ1088 - [SCOI2005]扫雷Mine

2017-12-08 22:05 281 查看
原题链接

题意简述

在一个2行n(n≤104)列的扫雷棋盘中,仅在第一行存在雷。给出第二行的标数情况,求可能的方案数。

分析

记第一行的雷分布情况为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
; int a
;
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
==x
) 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需要特判一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: