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