LGP1641 [SCTS 2010] 生成字符串 学习笔记
LGP1641 [SCTS 2010] 生成字符串 学习笔记
题意简述
你需要用 \(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);
//象征性给一行吧。
浙公网安备 33010602011771号