题目大意

给出一个长度为 \(N\) 的01串,其中有 \(K\) 个 \(1\),其他都是 \(0\),需要求出当着 \(K\) 个 \(1\) 分成 \(1\) 到 \(K\) 段每一个的方案数.

分析

因为需要将这 \(K\) 个 \(1\) 分成 \(i\)(\(1 \leq i \leq K\))段,那自然就会想到隔板法,那么方案数就是 \(C_{K-1}^{i-1}\),要将这 \(i\) 段放入长度为 \(N-K\) 的 \(0\) 串中,在这样一个串中有 \(N-K+1\) 个位置可以插入一个串,但是每个位置只可以插入一个串,所以方案数就是 \(C_{N-K+1}^{i}\),所以对于分成 \(i\) 段的答案就是 \(C_{K-1}^{i-1} \times C_{N-K+1}^{i}\).计算组合数只要预处理一下逆元就好了,如果不知道怎么处理可以看看这篇文章.

代码

#include<bits/stdc++.h>
#define REP(i,first,last) for(int i=first;i<=last;++i)
#define DOW(i,first,last) for(int i=first;i>=last;--i)
using namespace std;
const int MAXN=1e7+7;
const long long mod=1e9+7;
int N,M;
int K;
long long fac[MAXN];
long long inv[MAXN];
long long Inv(long long a,long long b=mod-2)//普通的一个快速幂
{
long long result=1;
while(b)
{
if(b&1)
{
result*=a;
result%=mod;
}
a*=a;
a%=mod;
b/=2;
}
return result;
}
long long C(int N,int M)//计算组合数
{
if(M>N)//需要特判
{
return 0;
}
if(N==M)
{
return 1;
}
long long result=fac[N];
result=(result*inv[N-M])%mod*inv[M];
return result%mod;
}
int main()
{
scanf("%d%d",&N,&K);
fac[1]=1;
REP(i,2,N+1)//处理阶乘
{
fac[i]=fac[i-1]*i;
fac[i]%=mod;
}
inv[N+1]=Inv(fac[N+1]);//处理逆元
DOW(i,N,0)
{
inv[i]=1ll*inv[i+1]*(i+1);
inv[i]%=mod;
}
//我比较喜欢用N,M
N=N-K;
M=K;
REP(i,1,K)
{
long long answer=C(N+1,i)*C(M-1,i-1);//直接带公式
printf("%lld\n",answer%mod);
}
return 0;
}

「AT4741 [ABC132D] Blue and Red Balls」的更多相关文章

  1. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App's Memory

    Managing Your App's Memory In this document How Android Manages Memory Sharing Memory Allocating and ...

  2. SSH连接时出现「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」解决办法

    用ssh來操控github,沒想到連線時,出現「WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!」,後面還有一大串英文,這時當然要向Google大神求助 ...

  3. 「ZJOI2019」&「十二省联考 2019」题解索引

    「ZJOI2019」&「十二省联考 2019」题解索引 「ZJOI2019」 「ZJOI2019」线段树 「ZJOI2019」Minimax 搜索 「十二省联考 2019」 「十二省联考 20 ...

  4. Loj #6069. 「2017 山东一轮集训 Day4」塔

    Loj #6069. 「2017 山东一轮集训 Day4」塔 题目描述 现在有一条 $ [1, l] $ 的数轴,要在上面造 $ n $ 座塔,每座塔的坐标要两两不同,且为整点. 塔有编号,且每座塔都 ...

  5. Loj #6073.「2017 山东一轮集训 Day5」距离

    Loj #6073.「2017 山东一轮集训 Day5」距离 Description 给定一棵 \(n\) 个点的边带权的树,以及一个排列$ p\(,有\)q $个询问,给定点 \(u, v, k\) ...

  6. Loj 6068. 「2017 山东一轮集训 Day4」棋盘

    Loj 6068. 「2017 山东一轮集训 Day4」棋盘 题目描述 给定一个 $ n \times n $ 的棋盘,棋盘上每个位置要么为空要么为障碍.定义棋盘上两个位置 $ (x, y),(u, ...

  7. 「2017 山东一轮集训 Day5」苹果树

    「2017 山东一轮集训 Day5」苹果树 \(n\leq 40\) 折半搜索+矩阵树定理. 没有想到折半搜索. 首先我们先枚举\(k\)个好点,我们让它们一定没有用的.要满足这个条件就要使它只能和坏 ...

  8. 【LOJ#6066】「2017 山东一轮集训 Day3」第二题(哈希,二分)

    [LOJ#6066]「2017 山东一轮集训 Day3」第二题(哈希,二分) 题面 LOJ 题解 要哈希是很显然的,那么就考虑哈希什么... 要找一个东西可以表示一棵树,所以我们找到了括号序列. 那么 ...

  9. loj6068. 「2017 山东一轮集训 Day4」棋盘 二分图,网络流

    loj6068. 「2017 山东一轮集训 Day4」棋盘 链接 https://loj.ac/problem/6068 思路 上来没头绪,后来套算法,套了个网络流 经典二分图 左边横,右边列 先重新 ...

随机推荐

  1. for await of异步操作集合遍历

    function Gen (time) { return new Promise((resolve,reject) => { setTimeout(function () { resolve(t ...

  2. opencv:形态学操作-腐蚀与膨胀

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  3. bugku 社工进阶

    首先看到的是 由于之前知道有bugku的百度吧   并且这个是一个社工题所以可以试一下这个百度吧 进入百度吧然后会见到 这句话的意思是要我们登录这个账号 但是我们只有账号没有密码  如果爆破的话很有可 ...

  4. vue 实现上一周、下一周切换功能

    效果图: html 显示部分: js 显示部分: preNextBtn(val){ let _this = this; this.tableList = []; //数据重置为空 _this.show ...

  5. Java 动态代理实现

    1.依赖 java.lang.reflect.Proxy - 提供了静态方法去创建动态代理类的实例: Interface InvocationHandler - 一个代理实例调用处理程序实现的接口 2 ...

  6. 树莓派学习之路-GPIO Zero

    原来用的都是RPi.GPIO模式开发,写程序 今天看到了GPIOZERO的资料,觉得这个API还是很好用的, 唯一的缺点就是官方资料是英文的,而且目前这方面的资料也不多, 所以开始写这篇博文,将自己学 ...

  7. maven 项目搭建

    转自:https://www.cnblogs.com/lzx2509254166/p/7674455.html Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软 ...

  8. Block Chain Learning Notes

    区块链是什么 区块链技术是由比特币创造的,本文也将从比特币开始进行引导,一步一步告诉大家什么是区块链.如果你想立马知道区块链是什么,也可以直接转到文章末尾的区块链定义. 区块链,可能是当下最有前景又充 ...

  9. ajax循环展示某段代码

    ajax内定义function,根据条件递归调用即可. success: function(data){ if (dataList[i].subModuleList){ sublist(dataLis ...

  10. 解决ifarme在ios下无法使用

    在第一层的config 添加 <access origin="*" /><allow-navigation href="*" />< ...