LGP1641 [SCTS 2010] 生成字符串 学习笔记

LGP1641 [SCTS 2010] 生成字符串 学习笔记

Luogu Link

题意简述

你需要用 \(n\)\(\texttt{1}\)\(m\)\(\texttt{0}\) 组成字符串。你需要满足,对于组成的字符串的任意前缀,\(\texttt{1}\) 的个数不能少于 \(\texttt{0}\) 的个数。问有多少满足条件的字符串。

\(n,m\le 10^6\)

做法解析

没有限制的时候答案显然是 \(\binom{n+m}{m}\)。限制怎么处理呢?

你把问题摊到网格上。你令添一个 \(\texttt{1}\) 为往上走,添一个 \(\texttt{0}\) 为往右走。我们需要去掉的那些方案就是碰到了 \(y=x-1\) 的。又根据对称性,这些方案的数量等价于从 $(1,-1) 开始走的方案数。所以要减掉的方案数即为 \(\binom{n+m}{m-1}\)

代码实现

这还有必要放代码么?

ans=Comb(N+M,N)-Comb(N+M,M-1);
//象征性给一行吧。
posted @ 2025-07-14 15:25  矞龙OrinLoong  阅读(9)  评论(0)    收藏  举报