比赛 20111108 评测结果 AAAAATTTTT
题目名称 分裂 最终得分 50
用户昵称 magic 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-08 11:06:02
显示代码纯文本
#include<iostream>
#include<fstream>
#include<cstdio>
#include<string>
using namespace std;
	string g[10005];
	string ans;
	int n;
	string first[10005];
	int data[100005];
string splus(string a,string b);
string splus(string a,string b)
{
	int p,q,l;
	string t;
	for (int i=0;i<=1000;i++)
	{
		data[i]=0;
	}
	p=a.length();
	q=1;
	for (int i=p-1;i>=0;i--)
	{
		data[q]=a[i]-'0';
		q++;
	}
	p=b.length();
	q=1;
	for (int i=p-1;i>=0;i--)
	{
		data[q]+=b[i]-'0';
		q++;
	}
	l=max(a.length(),b.length());
	for (int i=1;i<=l;i++)
	{
		data[i+1]+=data[i]/10;
		data[i]%=10;
	}
	if (data[l+1]>0)
	{
			l++;
	}
	for (int i=l;i>=1;i--)
	{
		t+=data[i]+'0';
	}
	return t;
}	
int main() 
{
	ifstream fi("mushroom.in");
	ofstream fo("mushroom.out");
	fi>>n;
	ans='0';
	for (int i=0;i<=n;i++)
	{
		g[i]='0';
	}	
	g[2]='1';
	first[2]='1';
	if (n==1)
	{
		fo<<'1';
		return 0;
	}
	for (int i=2;i<=n;i++)
	{
		for (int j=1;j<=i+1;j++)
		{
			g[j]=splus(first[j-1],first[j+1]);
			if (i==n)
			{
				ans=splus(g[j],ans);
			}
		}
		for (int j=1;j<=i+1;j++)
		{
			first[j]=g[j];
		}
	}
	fo<<ans;
	fi.close();
	fo.close();
	return 0;
}