White and Black Balls

题目大意

将 \(n\) 个白球,\(m\) 个黑球排成一列,要求满足 \(\forall i\in[1,n+m],w_i\le b_i+k\),问存在多少种排法。

其中 \(w_i\) 表示第 \(i\) 个球前的白球数量,\(b_i\) 表示第 \(i\) 个球前的黑球数量。

思路分析

我们可以将一种排法映射成一条从 \((0,0)\) 到 \((m,n)\) 的路径。具体的说,从 \((0,0)\) 开始,如果当前球是白球,那么向上移动一个单位长度;如果是黑球,那么向右移动一个单位长度,到达 \((m,n)\) 结束。

容易发现,路径条数为 \(C_{n+m}^m\),但其中包含不合法的情况,需要排除。

如图,我们发现,如果一条路径始终位于直线 \(y=x+k\) 下方,那么这条路径就是合法的。换而言之,如果一条路径与直线 \(y=x+k+1\) 有交点,那么这条路径不合法。

对于不合法的路径,我们将最右端的交点的左半部分沿 \(y=x+k+1\) 翻转,得到一条新的从 \((-k-1,k+1)\) 到 \((m,n)\) 的路径,显然所有的不合法路径可以通过这种办法与从 \((-k-1,k+1)\) 到 \((m,n)\) 的路径一一对应。而这样的路径条数为 \(C_{n+m}^{m+k+1}\)。

因此,最后的答案就是 \(C_{n+m}^m-C_{n+m}^{m+k+1}\)。

注意特判 \(n>m+k\) 的情况。

代码

#include <iostream>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <cstdio> using namespace std;
const int N=2000100,L=2000000,mod=1000000007;
#define int long long int n,m,k;
int fac[N],inv[N]; int q_pow(int a,int b){
int res=1;
while(b){
if(b&1) res=(res*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return res;
} int C(int a,int b){//逆元法直接计算
return ((fac[a]*inv[b]%mod)*inv[a-b])%mod;
} signed main(){
scanf("%lld%lld%lld",&n,&m,&k);
fac[0]=1;
for(int i=1;i<=L;i++) fac[i]=fac[i-1]*i%mod;
inv[L]=q_pow(fac[L],mod-2);
for(int i=L;i>=1;i--) inv[i-1]=inv[i]*i%mod;//预处理逆元
if(n>m+k){cout<<"0\n";return 0;}//特判
int ans=(C(n+m,m)-C(n+m,m+k+1)+mod)%mod;//计算答案,可能出负数,需再模一遍
cout<<ans<<'\n';
return 0;
}

[ABC205E] White and Black Balls 题解的更多相关文章

  1. CF755G PolandBall and Many Other Balls 题解

    从神 Karry 的题单过来的,然后自己瞎 yy 了一个方法,看题解区里没有,便来写一个题解 一个常数和复杂度都很大的题解 令 \(dp_{i,j}\) 为 在 \(i\) 个球中选 \(j\) 组的 ...

  2. [POJ3783]Balls 题解

    题目大意 鹰蛋问题.$ n\(个蛋,\)m\(层楼. 存在一层楼\)E\(,使得\)E\(以及\)E\(以下的楼层鹰蛋都不会摔碎,问最坏情况下最少多少次能够知道\)E$. 非常经典的模型,初看题目根本 ...

  3. CF850F Rainbow Balls 题解

    考虑最后变成哪一种颜色. 设 \(s = \sum\limits_{i=1}^n a_i\) 设现在有 \(k\) 种当前颜色, 需要全部变成该种颜色, 期望步数为 \(f_k\). 考虑状态转移.设 ...

  4. Codeforces Round #368 (Div. 2)A B C 水 图 数学

    A. Brain's Photos time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

  5. [HackerRank]Choosing White Balls

    [HackerRank]Choosing White Balls 题目大意: 有\(n(n\le30)\)个球排成一行,每个球的颜色为黑或白. 执行\(k\)次操作,第\(i\)次操作形式如下: 从\ ...

  6. 题解-CF755G PolandBall and Many Other Balls

    题面 CF755G PolandBall and Many Other Balls 给定 \(n\) 和 \(m\).有一排 \(n\) 个球,求对于每个 \(1\le k\le m\),选出 \(k ...

  7. HDU 3911 Black And White 分段树 题解

    Problem Description There are a bunch of stones on the beach; Stone color is white or black. Little ...

  8. POJ 3687 Labeling Balls(拓扑排序)题解

    Description Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them ...

  9. HDU1510 White rectangles( 乱搞 O(n^3) )题解

    思路: 友谊赛的时候一直想到了,但是没想出来怎么遍历才能找到所有矩阵,卡住了. 这里讲一下完整思路:我们用一个num[i][j]表示第i行第j列每一列连续的白色格子数量,然后我们定义一个MIN,并且每 ...

  10. 【题解】Popping Balls AtCoder Code Festival 2017 qual B E 组合计数

    蒟蒻__stdcall终于更新博客辣~ 一下午+一晚上=一道计数题QAQ 为什么计数题都这么玄学啊QAQ Prelude 题目链接:这里是传送门= ̄ω ̄= 下面我将分几个步骤讲一下这个题的做法,大家不 ...

随机推荐

  1. WAMP apache 无法运行 报错could not execult menu item

    wamp:could not execult menu item (internal error)[exception]counld not perform service action:服务器没有及 ...

  2. 深入解析Redis的LRU与LFU算法实现

    作者:vivo 互联网服务器团队 - Luo Jianxin 重点介绍了Redis的LRU与LFU算法实现,并分析总结了两种算法的实现效果以及存在的问题. 一.前言 Redis是一款基于内存的高性能N ...

  3. 4.1 探索LyScript漏洞挖掘插件

    在第一章中我们介绍了x64dbg这款强大的调试软件,通过该软件逆向工程师们可以手动完成对特定进程的漏洞挖掘及脱壳等操作,虽然x64dbg支持内置Script脚本执行模块,但脚本引擎通常来说是不够强大的 ...

  4. 从零配置Webpack项目

    webpack.config.js基本配置 webpack.config.js是webpack的配置文件,在此文件中对项目入口,项目的输出,loader,插件以及环境等进行简单的配置 首先来对webp ...

  5. Docker、CICD持续集成部署、Gitlab使用、Jenkins介绍

    目录 1.Docker的基本操作 1.1镜像拉取 1.2镜像的操作 1.3容器的操作 运行容器 查看正在运行的容器 查看容器运行日志 进入到容器内部 停止容器运行 删除容器 启动容器 2.Docker ...

  6. 电脑安装JDk

    JDK软件下载链接:https://pan.baidu.com/s/1OG6wD-Fvgxu6FwuOUMDmQQ提取码:yu0l Eclipse软件下载链接:https://pan.baidu.co ...

  7. 2023icpc大学生程序设计竞赛-zzh

    这次比赛是第一次去外地打比赛,感觉挺好的.洛阳师范绿化感觉比我们学校好很多,校园看起来也挺大的.群里说牛肉汤是洛阳特色,比赛当天上午特地跑了两个餐厅,找到了一家牛肉汤,吃起来挺一般的,不过这家的酱香饼 ...

  8. 青少年CTF平台-Web-PingME

    题目描述 题目难度一颗星,五十分. 解题记录 进入题目中,发现这是一个ping功能 我们用连字符||进行分割两个语句,保证同时运行且输出. Payload为127.0.0.1 || ls 发现有fla ...

  9. 语音合成技术3:HierVST: Hierarchical Adaptive Zero-shot Voice Style Transfer

    HierVST: 分层自适应零样本语音风格转换 摘要: 尽管语音风格转换(VST)领域取得了快速进展,但最近的零样本VST系统仍然缺乏将新的说话者的语音风格进行转换的能力.在本文中,我们提出了Hier ...

  10. XAML格式化工具:XAML Styler

    XAML格式化的意义 在开发WPF应用过程中,编写XAML时需要手动去缩进或者换行,随着时间的推移或者参与开发的人增多,XAML文件内容的格式会越来越乱.要么属性全都写在一行,内容太宽一屏无法完整展现 ...