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");
    }
    ;
}
05-11 21:48