1088: [SCOI2005]扫雷Mine
Time Limit: 10 Sec Memory Limit: 162 MB
Submit: 659 Solved: 386
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 1
Sample Output
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<functional>
#include<cmath>
using namespace std;
#define MAXN (10000+10)
int n,a[MAXN];
int f[MAXN][2][2]={0}; //Middle and 1
int main()
{
cin>>n;
for (int i=1;i<=n;i++) cin>>a[i];
switch (a[1])
{
case 2:f[1][1][1]++;break;
case 0:f[1][0][0]++;break;
default:f[1][0][1]=f[1][1][0]=1;
}
for (int i=2;i<=n;i++)
{
switch (a[i])
{
case 3:f[i][1][1]=f[i-1][1][1];break;
case 0:f[i][0][0]=f[i-1][0][0];break;
case 2:f[i][1][0]=f[i-1][1][1];f[i][0][1]=f[i-1][1][0];f[i][1][1]=f[i-1][0][1];break;
case 1:f[i][1][0]=f[i-1][0][1];f[i][0][1]=f[i-1][0][0];f[i][0][0]=f[i-1][1][0];break;
}
}
cout<<f[n][1][0]+f[n][0][0]<<endl;
return 0;
}