P1655 小朋友的球
题目描述
@发源于 小朋友最近特别喜欢球。有一天他脑子抽了,从口袋里拿出了N个不同的球,想把它们放到M个相同的盒子里,并且要求每个盒子中至少要有一个球,他好奇有几种放法,于是尝试编程实现,但由于他天天不好好学习,只会上B站看游泳教练,于是他向你求助。
输入输出格式
输入格式:
多组数据,每行两个数N,M。
输出格式:
每组数据一行,表示方案数。
输入输出样例
输入样例#1:
4 2 1 1
输出样例#1:
7 1
说明
【样例解释】
N=4,M=2
1,2 3 4
2,1 3 4
3,1 2 4
4,1 2 3
1 2,3 4
1 3,2 4
1 4,2 3
对于20%的数据,满足1≤N,M≤10;
对于100%的数据,满足1≤N,M≤100,数据组数≤10。
striling·数
不写高精只有20分。。。。
高精string数
#include<cmath> #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<algorithm> #define inf 999999999 #define For(i,a,b) for(i=a;i<=b;++i) #define rep(i,a,b) for(i=a;i>=b;--i) #define mm(a,b) memset(a,b,sizeof(a)) #define ll long long using namespace std; ll read(){ ll sum=,flag=; char c=getchar(); ;c=getchar();} +c-',c=getchar(); return sum*flag; } ll maxx(ll x,ll y){ if(x<y)return y; return x; } ll minn(ll x,ll y){ if(x<y)return x; return y; } ll abss(ll x){ )return x; return -x; } struct node{ ll a[],len; node(){mm(a,);len=;}//记得初始化 }; node t[][]; node operator + (node c,node d){ node h;h.len=maxx(c.len,d.len); int i; ;i<=h.len;i++){ h.a[i]+=c.a[i]+d.a[i]; ){ h.a[i+]+=h.a[i]/; h.a[i]%=; if(i==h.len)h.len++; } } return h; } node operator * (node c,ll u){ node h;h.len=c.len; int i; ;i<=h.len;i++){ h.a[i]+=c.a[i]*u; ){ h.a[i+]+=h.a[i]/; h.a[i]%=; if(i==h.len)h.len++; } } return h; } int main(){ ll i,j,m,n; For(i,,)t[i][].a[]=,t[i][i].a[]=t[i][].a[]=,t[i][].len=t[i][i].len=t[i][].len=; For(i,,){ For(j,,i-){ t[i][j]=t[i-][j-]+t[i-][j]*j; } } while(scanf("%lld%lld",&m,&n)!=EOF){ ||n>m){printf("0\n");continue;} rep(i,t[m][n].len,)printf("%lld",t[m][n].a[i]); printf("\n"); } ; }