比赛 20121107 评测结果 AAAAA
题目名称 三只小猪 最终得分 100
用户昵称 QhelDIV 运行时间 0.009 s
代码语言 C++ 内存使用 7.22 MiB
提交时间 2012-11-07 11:57:38
显示代码纯文本
#include <fstream>
#include <memory.h>
#include <cstdlib>
using namespace std;
ifstream fin("piggy.in");
ofstream fout("piggy.out");
int N[1000],M[1000],T,n,m;
long long Sum;
class HP
{
public:
	int Len,list[100];
	HP()
	{
		memset(list,0,sizeof(list));
		Len=1;list[1]=0;
	}
	void Plus(int a[],int Length)
	{
	int Leng=max(Length,Len);
		for(int i=1;i<=Leng;i++)
		{
			list[i]+=a[i];
			list[i+1]+=list[i]/10;
			list[i]%=10;
		}
		while(list[Leng+1]!=0)
			Leng++;
		Len=Leng;
	}
	void Times(int Mul)
	{
	int i;
		for(i=1;i<=Len;i++)
			list[i]*=Mul;
		for(i=1;i<=Len;i++)
		{
			list[i+1]+=list[i]/10;
			list[i]%=10;
		}
		while(list[Len+1]!=0)
		{
			Len++;
			list[Len+1]+=list[Len]/10;
			list[Len]%=10;
		}
	}
	void Print()
	{
		for(int i=Len;i>=1;i--)
			fout<<list[i];
		fout<<endl;
	}
}f[101][101];
int main()
{
int i,j,k;
	fin>>T;
	for(i=1;i<=T;i++)
	{
		fin>>N[i]>>M[i];
		n=max(n,N[i]);
		m=max(m,M[i]);
	}
	f[0][0].list[1]=1;
	for(j=1;j<=n;j++)
		for(k=1;k<=m;k++)
		{
		HP g;
			f[j][k].Plus(f[j-1][k-1].list,f[j-1][k-1].Len);
			g.Plus(f[j-1][k].list,f[j-1][k].Len);
			g.Times(k);
			f[j][k].Plus(g.list,g.Len);
		}
	for(i=1;i<=T;i++)
		f[N[i]][M[i]].Print();
	fin.close();
	fout.close();
	return 0;
}