比赛 AHOI09DAY2模拟 评测结果 AAAWAAAAAA
题目名称 跳棋 最终得分 90
用户昵称 Pom 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-03-09 09:58:16
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

const int MAXN=1111;

long long f1[MAXN],f2[MAXN],i,j,k,n,ans1=0,ans2=0,f[MAXN];
bool map[MAXN],b1[MAXN],b2[MAXN],b[MAXN];

int main()
{
	freopen("checker09.in","r",stdin);
	freopen("checker09.out","w",stdout);
	scanf("%d",&n);
	for (i=1;i<=n;i++)
	{
		scanf("%d",&j);
		if (j) map[i]=true;
		else map[i]=false;
		b1[i]=b2[i]=false;
	}
	for (i=1;i<=n;i++)
	{
		if (map[i])
		{
			f1[i]=1;
			b1[i]=true;
			continue;
		}
		if (i>2)
			if (b1[i-1] && b1[i-2])
			{
				f1[i]=f1[i-1]+f1[i-2];
				b1[i]=true;
			}
		if (f1[i]<0) b1[i]=false;
	}
	
	for (i=n;i>=1;i--)
	{
		if (map[i])
		{
			f2[i]=1;
			b2[i]=true;
			continue;
		}
		if (i<=n-2)
			if (b2[i+1] && b2[i+2])
			{
				f2[i]=f2[i+1]+f2[i+2];
				b2[i]=true;
			}
		if (f2[i]<0) b2[i]=false;
	}
	for (i=1;i<=n;i++)
	{
		b[i]=b1[i] || b2[i];
		if (b1[i]) 
		{
			f[i]=f1[i];
			if (b2[i] && f2[i]<f[i]) f[i]=f2[i];
		}
		else if (b2[i]) f[i]=f2[i];
	}
	for (i=2;i<n;i+=2)
		if (b[i]) ans2+=f[i];
		else ans1+=1;
	cout<<ans1<<' '<<ans2<<endl;
	return 0;
}