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

using namespace std;
const long long oo=10000000000000001LL;
int a[1001];
int h,n;
long long f1[1005],f2[1005],ans;
void init()
{
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
	{
		scanf("%d",a+i);
		if (i==1) a[1]=0;
		if (a[i]!=0 && a[i-1]!=0)
		{
			h++;
		}
	}
}

void solve0()
{
	int t1=0,t2=0;
	for (int i=1;i<=n;i++)
	if ((i & 1)==0)
	{
		if (a[i]!=0) t2++;
		else t1++;
	}
	printf("%d %d\n",t1,t2);
}

void solve1()
{	
	printf("0 ");
	for (int i=1;i<=n;i++)
	{
		f1[i]=oo;
		if (i>2 && f1[i-1]!=oo && f1[i-2]!=oo)
		{
			f1[i]=f1[i-1]+f1[i-2];
		}
		if (a[i]!=0) f1[i]=1;
	}
	for (int i=n;i>=2;i--)
	{
		f2[i]=oo;
		if (i<=n-2 && f2[i+1]!=oo && f2[i+2]!=oo)
		{
			f2[i]=f2[i+1]+f2[i+2];
		}
		if (f2[i]>oo) f2[i]=oo;
		if (a[i]!=0) f2[i]=1;
	}
	for (int i=2;i<n;i+=2) ans+=min(f1[i],f2[i]);
	printf("%lld\n",ans);
}

int main()
{
	freopen("checker09.in","r",stdin);
	freopen("checker09.out","w",stdout);
	init();
	if (h==0) solve0();
	else solve1();
	return 0;
}