洛谷——P1655 小朋友的球

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=0,flag=1;
    char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')flag=-1;c=getchar();}
    while(c>='0'&&c<='9')sum=sum*10+c-'0',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){
    if(x>=0)return x;
    return -x;
}
struct node{
    ll a[500],len;
    node(){mm(a,0);len=0;}//记得初始化
};
node t[111][111];
node operator + (node c,node d){
    node h;h.len=maxx(c.len,d.len);
    int i;
    for(i=1;i<=h.len;i++){
        h.a[i]+=c.a[i]+d.a[i];
        if(h.a[i]>=10){
            h.a[i+1]+=h.a[i]/10;
            h.a[i]%=10;
            if(i==h.len)h.len++;
        }
    }
    return h;
}
node operator * (node c,ll u){
    node h;h.len=c.len;
    int i;
    for(i=1;i<=h.len;i++){
        h.a[i]+=c.a[i]*u;
        if(h.a[i]>=10){
            h.a[i+1]+=h.a[i]/10;
            h.a[i]%=10;
            if(i==h.len)h.len++;
        }
    }
    return h;
}
int main(){
    ll i,j,m,n;
    For(i,1,100)t[i][0].a[1]=0,t[i][i].a[1]=t[i][1].a[1]=1,t[i][0].len=t[i][i].len=t[i][1].len=1;
    For(i,2,100){
        For(j,2,i-1){
            t[i][j]=t[i-1][j-1]+t[i-1][j]*j;
        }
    }
    while(scanf("%lld%lld",&m,&n)!=EOF){
        if(n==0||n>m){printf("0\n");continue;}
        rep(i,t[m][n].len,1)printf("%lld",t[m][n].a[i]);
        printf("\n");
    }    
    return 0;
}

 

转载于:https://www.cnblogs.com/z360/p/7862318.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值