[ABC205E] 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 题解的更多相关文章
- CF755G PolandBall and Many Other Balls 题解
从神 Karry 的题单过来的,然后自己瞎 yy 了一个方法,看题解区里没有,便来写一个题解 一个常数和复杂度都很大的题解 令 \(dp_{i,j}\) 为 在 \(i\) 个球中选 \(j\) 组的 ...
- [POJ3783]Balls 题解
题目大意 鹰蛋问题.$ n\(个蛋,\)m\(层楼. 存在一层楼\)E\(,使得\)E\(以及\)E\(以下的楼层鹰蛋都不会摔碎,问最坏情况下最少多少次能够知道\)E$. 非常经典的模型,初看题目根本 ...
- CF850F Rainbow Balls 题解
考虑最后变成哪一种颜色. 设 \(s = \sum\limits_{i=1}^n a_i\) 设现在有 \(k\) 种当前颜色, 需要全部变成该种颜色, 期望步数为 \(f_k\). 考虑状态转移.设 ...
- 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 ...
- [HackerRank]Choosing White Balls
[HackerRank]Choosing White Balls 题目大意: 有\(n(n\le30)\)个球排成一行,每个球的颜色为黑或白. 执行\(k\)次操作,第\(i\)次操作形式如下: 从\ ...
- 题解-CF755G PolandBall and Many Other Balls
题面 CF755G PolandBall and Many Other Balls 给定 \(n\) 和 \(m\).有一排 \(n\) 个球,求对于每个 \(1\le k\le m\),选出 \(k ...
- HDU 3911 Black And White 分段树 题解
Problem Description There are a bunch of stones on the beach; Stone color is white or black. Little ...
- POJ 3687 Labeling Balls(拓扑排序)题解
Description Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them ...
- HDU1510 White rectangles( 乱搞 O(n^3) )题解
思路: 友谊赛的时候一直想到了,但是没想出来怎么遍历才能找到所有矩阵,卡住了. 这里讲一下完整思路:我们用一个num[i][j]表示第i行第j列每一列连续的白色格子数量,然后我们定义一个MIN,并且每 ...
- 【题解】Popping Balls AtCoder Code Festival 2017 qual B E 组合计数
蒟蒻__stdcall终于更新博客辣~ 一下午+一晚上=一道计数题QAQ 为什么计数题都这么玄学啊QAQ Prelude 题目链接:这里是传送门= ̄ω ̄= 下面我将分几个步骤讲一下这个题的做法,大家不 ...
随机推荐
- 行行AI人才直播第5期:系列课-AI理解及ChatGPT从基础到高级应用
当前,人工智能是全世界研究的重点对象,也是人们茶余饭后讨论的经典话题.自从 OpenAI 发布 ChatGPT-4 之后,似乎无论是在工作.娱乐.甚至是日常生活中,我们都能感受到AI带来的便利和改变. ...
- 为什么从 MVC 到 DDD,架构的本质是什么?
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 本文来自于小傅哥新编写的<Java简明教程>系列内容,本教程意在于通过简单.明了. ...
- 2023-07-04:给定一个数组A, 把它分成两个数组B和C 对于数组A每个i位置的数来说, A[i] = B[i] + C[i] 也就是一个数字分成两份,然后各自进入B和C 要求B[i], C[i
2023-07-04:给定一个数组A, 把它分成两个数组B和C 对于数组A每个i位置的数来说, A[i] = B[i] + C[i] 也就是一个数字分成两份,然后各自进入B和C 要求B[i], C[i ...
- 【FAQ】关于CP反馈的联运应用的常见结算问题小结
问题一:为什么在"我的账户">>"收益"里面的金额和支付报表中的金额对不上 ? 关于联运类应用付费产品在华为平台上结算问题,您可以详细参考一下&qu ...
- 1 opencv-python图像读写模块
这个分类记录自己学习opencv的随笔文档,方便以后查询和复习.python-opencv环境配置网上教程很多,此处就不做赘述了,该文档记录opencv最基础的图像读写和显示,工具是jupyter n ...
- Unity UGUI的所有组件的介绍及使用
Unity UGUI的所有组件的介绍及使用 本文将介绍Unity UGUI中的各个组件,包括它们的具体介绍.用途 1. Text(文本) 介绍:Text组件用于在UI界面上显示文本内容. 用途:常用于 ...
- 《设计模式的运用》使用策略模式+工厂模式优化代码中的if else
使用策略模式优化if else 有这样一段逻辑 function{ for{ if() if() if( if( ) ) ... } } 公司有的祖传的代码,是一段规则校验,校验的越多,每一个请求都会 ...
- 在VS Code 中调试远程服务器的PHP代码
背景 对于PHP的调试,一般来说我们用 echo 和 var_dump 就够用了. 有时会碰到要解决复杂的逻辑或需要确认代码的运行顺序,这里用var_dump效率就比较低了,这时建议用断点的方式进行代 ...
- 分享我的 Shell 环境,git 操作效率提升 100% !
每当我换到一个新的开发环境,蛮多东西要折腾的.比如 git.golang.环境变量等等.所以特地整理了一下,下次换新电脑也方便. 本文分享我在工作中常用的环境变量 + Shell alias:比如 ...
- Spring相关API
ApplicationContext的继承体系 applicationContext applicationContext:接口类型,代表应用上下文,可以通过其实例获得Spring容器中的Bean A ...