比赛 20101117 评测结果 AAAAAAAAAA
题目名称 拯救 最终得分 100
用户昵称 .Xmz 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-11-17 10:29:45
显示代码纯文本
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cstdio>

using namespace std;

int n,a[2001];

struct gaojing
{
	int x[201];
	
	gaojing()
	{
		memset(x,0,sizeof(x));
	}
	
	void print()
	{
		int i;
		for (i=200;i>0;i--)
		{
			if (x[i]!=0) {printf("%d",x[i]);break;}
		}
		if (i==0) printf("0");
		for (int j=i-1;j>0;j--)
		{
			if (x[j]<10000000) printf("0");
			if (x[j]<1000000) printf("0");
			if (x[j]<100000) printf("0");
			if (x[j]<10000) printf("0");
			if (x[j]<1000) printf("0");
			if (x[j]<100) printf("0");
			if (x[j]<10) printf("0");
			printf("%d",x[j]);
		}
		printf("\n");
	}
}f[2001],g[2001],one;

gaojing add(gaojing a,gaojing b)
{
	gaojing t;
	int jin=0;
	for (int i=1;i<=200;i++)
	{
		t.x[i]=jin+a.x[i]+b.x[i];
		jin=0;
		if (t.x[i]>=100000000) t.x[i]%=100000000,jin=1;
	}
	return t;
}

int main()
{
	freopen("savey.in","r",stdin);
	freopen("savey.out","w",stdout);
	one.x[1]=1;
	scanf("%d",&n);
	for (int i=1;i<=n;i++)
	{
		scanf("%d",a+i);
	}
	a[n+1]=1;
	
	for (int i=1;i<=n+1;i++)
	{
		int j;
		if (a[i]!=1) f[i]=add(add(f[i-1],one),g[i-1]);
		else
		{
			for (j=i-1;j>0;j--)
				if (a[j]!=0) break;
			if (j!=0) f[i]=add(add(f[j-1],one),g[j-1]);
		}
		g[i]=add(add(g[i-1],one),g[i-1]);
	}
	
	f[n+1].print();
	return 0;
}