萌 新 求 助 #8 WA
查看原帖
萌 新 求 助 #8 WA
91956
Dreamweaver楼主2021/5/10 15:15
#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
#define inf 0x3f3f3f
#define re register
#define maxn 100000
int n,m;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while (ch<'0'||ch>'9') {if(ch=='-')f=-1; ch=getchar();}
    while (ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0'; ch=getchar();}
    return x*f;
}
struct bigint
{
	int  num[100];
	int len;
	bigint()
	{
		memset(num,0,sizeof(num));
		len=1;
	}
//
//	int &operator [] (int i)
//	{
//		return num[i];// x[i] ---->  x.num[i]
//	}
	void flat(int l)
	{
		len=l;
		for(re int i=1;i<l;i++)
			num[i+1] += num[i] / 10,num[i]%=10;
		for(;!num[len]&&len>1;)	len--;
	}
	void print()
	{
		for(int i=max(1,len);i>=1;i--)
			cout<<num[i];
	}

}dp[110][110];


bigint operator+(bigint a,bigint b)
	{
		bigint c;
		int len=max(a.len,b.len);
		for(re int i=1;i<=len;i++)
			c.num[i] += a.num[i] + b.num[i];
		c.flat(len+1);
		return c;
	}	
bigint operator*(bigint a,int b)
	{
		bigint c;
		int len=a.len;
		for(int i=1;i<=len;i++)
			c.num[i] = a.num[i]*b;
		c.flat(len+12);
		return c;
	} 
signed main()
{
//	freopen("a.in","r",stdin);
//	freopen("a.out","w",stdout);
//	printf("%dM\n",(sizeof(dp) >> 20));
	dp[0][0].num[1]=1;
	for(re int i=1;i<=100;i++)
		dp[i][1].num[1]=dp[i][i].num[1]=1;
	for(re int i=1;i<=103;i++)
		for(re int j=1;j<=103;j++)
		{
			if(i<j)	continue;
			dp[i][j] = dp[i-1][j-1]+dp[i-1][j]*j;
		}
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		if(n==m||m==1)
		{
			cout<<1<<'\n';
			continue;
		}
		if(n<m)
		{
			cout<<0<<'\n';
			continue;
		}
		dp[n][m].print();
		cout<<'\n';
	}
	return 0;
}



2021/5/10 15:15
加载中...