比赛 |
20121107 |
评测结果 |
AAAAA |
题目名称 |
三只小猪 |
最终得分 |
100 |
用户昵称 |
苏轼 |
运行时间 |
0.062 s |
代码语言 |
C++ |
内存使用 |
10.03 MiB |
提交时间 |
2012-11-07 11:01:44 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int t,n,m;
class huge
{
public:int len,num[500];
huge()
{
len=0;
memset(num,0,500);
};
}temp;
huge make_huge(int x)
{
huge tmp;
tmp.len=0;
while (x>0)
{
tmp.num[++tmp.len]=x%10;
x/=10;
}
return tmp;
}
huge q[60][60];
/*huge multi_huge(huge x,huge y)
{
huge tmp;
for (int i=1;i<=x.len;i++)
{
for (int j=1;j<=y.len;j++)
{
tmp.num[i+j-1]=x.num[i]*y.num[j];
}
}
for (int i=1;i<=x.len+y.len-1;i++)
{
tmp.num[i+1]+=tmp.num[i]/10;
tmp.num[i]%=10;
}
if (tmp.num[x.len+y.len]!=0)
{
tmp.len=x.len+y.len;
}
else
{
tmp.len=x.len+y.len-1;
}
while (tmp.num[tmp.len]==0)
tmp.len--;
return tmp;
}
*/
huge multi_huge(huge a,huge b)
{
int i,j;
huge ans;
for (i=1;i<=a.len;i++)
for (j=1;j<=b.len;j++)
ans.num[i+j-1]+=a.num[i]*b.num[j];
for (i=1;i<=a.len+b.len;i++)
{
ans.num[i+1]+=ans.num[i]/10;
ans.num[i]=ans.num[i]%10;
}
if (ans.num[a.len+b.len]>0)
ans.len=a.len+b.len;
else
ans.len=a.len+b.len-1;
while (ans.num[ans.len]==0)
ans.len--;
return ans;
}
huge add_huge(huge x,huge y)
{
huge tmp;
int l;
l=max(x.len,y.len);
for (int i=1;i<=l;i++)
{
tmp.num[i]=x.num[i]+y.num[i];
}
for (int i=1;i<=l;i++)
{
tmp.num[i+1]+=tmp.num[i]/10;
tmp.num[i]%=10;
}
if (tmp.num[l+1]!=0)
{
tmp.len=l+1;
}
else
{
tmp.len=l;
}
while (tmp.num[tmp.len]==0)
tmp.len--;
return tmp;
}
int main()
{
freopen ("piggy.in","r",stdin);
freopen ("piggy.out","w",stdout);
cin>>t;
for (int o=0;o<t;o++)
{
cin>>n>>m;
if (n<m)
{
cout<<0<<endl;
continue;
}
for (int i=1;i<=n;i++)
{
q[i][0]=make_huge(0);
}
for (int i=1;i<=m;i++)
{
q[0][i]=make_huge(0);
}
q[0][0]=make_huge(1);
for (int j=1;j<=m;j++)
{
for (int i=1;i<=n;i++)
{
temp=make_huge(j);
q[i][j]=multi_huge(q[i-1][j],temp);
q[i][j]=add_huge(q[i][j],q[i-1][j-1]);
}
}
for (int i=q[n][m].len;i>0;i--)
{
cout<<q[n][m].num[i];
}
/*huge a,b;
b=make_huge(999999);
a=make_huge(1);
a=add_huge(a,b);
for (int i=a.len;i>=1;i--)
cout<<a.num[i];
*/
cout<<endl;
}
return 0;
}