【题解】 D - Binomial Coefficient is Fun

题目来源:Atcoder ARC 110 - D

题意:

略(说不清楚,自己看题!)

思路:

分析题目中所给的表达式,当B确定时,表达式的含义为:从B1中选A1个数,同时从B2中选A2个数,同时从B3个数中选A3个数,…,同时从Bn个数中选An个数,总共有多少种方法。得到一个子问题。
子问题解决:记sumA、sumB分别为此时A、B的元素和。可以先从sumB个元素中选出sumA个元素,但这并没有达到分组的效果。假设这些数都是小球,现在加上木棒以分组。从sumB+n个元素中选出sumA+n个元素,设第1个到第A1个元素为小球,第A1+1个元素为木棒;第A1+1+1个到第A1+1+A2个元素为小球,第A1+1+A2+1个元素为木棒,以此类推。加上木棒的目的是在选取小球的过程中进行分组,默认每一组后的第一个元素为木棒。
其实对上面的子问题选取n-1个木棒即可,但选取最后一个木棒的目的是为了第二个子问题:构造所有的B数列。前n-1个木棒是将每一组进行区分,那么第n个木棒的目的就是为了将B中的所有数与B之外的数进行区分(即m-sumB)。
综上可以这样理解:最后一根木棒决定了sumB的大小,前n-1个木棒则是对B进行分组,而至于A的选取已经在分组时完成了。

代码:

//#include <bits/stdc++.h>
#include <iostream>
#include <queue>
#include <list>
#include <set>
#include <map>
#include <vector>
#include <stack>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <cctype>
#include <functional>
#include <string>
#include <cstring>
#include <sstream>
#include <deque>
#define fir first
#define sec second
using namespace std;

typedef long long ll;
typedef pair<int,int> P;
typedef pair<P,int> Q;

const int inf1=1e9+9;
const ll inf2=1e16+9;
const ll mod=1e9+7;
const int maxn=2e5+9;
const ll maxx=1e12+9;
const int DEG=20;

ll n,m,ar[maxn];

ll q_pow(ll x,ll t) {
    ll res=1;
    while(t) {
        if(t&1) res=res*x%mod;
        x=x*x%mod; t>>=1;
    }
    return res;
}
ll inv(ll a) {
    return q_pow(a,mod-2);
}
ll c(ll n,ll r) {
    if(r>n) return 0;
    if(n-r<r) r=n-r;
    ll a=1,b=1;
    for(int i=1;i<=r;i++) {
        a=a*(n-i+1)%mod;
        b=b*i%mod;
    }
    return a*inv(b)%mod;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=0;i<n;i++) scanf("%d",&ar[i]);
    ll sum=0;
    for(int i=0;i<n;i++) sum+=ar[i];
    printf("%lld\n",c(n+m,sum+n));
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值