比赛 |
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;
}