http://www.elijahqi.win/archives/1315
题目描述
输入输出格式
输入格式:
第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)
输出格式:
一个数,即第一列中雷的摆放方案数。
输入输出样例
输入样例#1:
2
1 1
输出样例#1:
2
leoly给的水题 orz被数据范围秒杀的我 leoly说 因为第一个格子的状态只有两种 所以深搜就好
#include<cstdio>
inline char gc(){
static char now[1<<16],*S,*T;
if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S) return EOF;}
return *S++;
}
inline int read(){
int x=0,f=1;char ch=gc();
while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=gc();}
while (ch<='9'&&ch>='0'){x=x*10+ch-'0';ch=gc();}
return x*f;
}
int cnt=0,n,a[11000],b[11000];bool done;
void dfs(int x){
if (x>n) return;
b[x]=a[x-1]-b[x-1]-b[x-2];
if (x==n) {
if (b[n]!=a[n]-b[n-1]) {
done=0;return;
}
}
if (b[x]!=0&&b[x]!=1) {
done=0;return;
}dfs(x+1);
}
int main(){
// freopen("2327.in","r",stdin);
n=read();
for (int i=1;i<=n;++i) a[i]=read();
for (int i=0;i<=1;++i){
done=1;
b[1]=i;b[2]=a[1]-b[1];dfs(3);cnt+=done;
}
printf("%d",cnt);
return 0;
}