题目大意

  把$n$个$1$和$m$个$0$组成字符串,在任意的前$k$个字符中,$1$的个数不能少于$0$的个数。求这样的字符串的个数。$1\leq m\leq n\leq 1000000$。

原始模型

  在坐标网格中,规定一个合法的路径如下:1. 起点为$(0, 0)$,终点为$(n, m)$;2. 该路径是个曼哈顿路径;3. 该路径在直线$l:y=x$的下方,且不接触$l$。求合法的路径的种类数。

  这类题的入手点在于:所有合法的路径都会经过点$(1,0)$,起点为$(1,0)$终点为$(n,m)$的曼哈顿路径数为$C_{n+m-1}^m$。而我们要在此基础上去除掉中途经过直线$l$的种类数。我们知道,起点为$(0,1)$,终点为$(n,m)$的曼哈顿路径(设组成的集合为$A$)一定经过直线$l$,这个交点最小可以到达$(1,1)$。而所有经过$(1,0)$且不合法的路径(设组成的集合为$B$)必然也经过直线$l$,交点最小为$(1,1)$,所以对于任意一条路径$p\in B$,如果$p'$是$p$把$(0,0)$至与$l$最后一个交点的部分按照直线$l$翻折得到的路径,则$p'\in A$。同理可得$A,B$满足一一映射关系。对于$\forall p'\in A$,其必须要向上走$m-1$步,总共要走$n+m-1$步,所以不合法的情况为$C_{n+m-1}^{m-1}$

  综上所述,结果为$C_{n+m-1}^m - C_{n+m-1}^{m-1}$

本题题解

  选1相当于向右走一格,选0相当于向上走一格,原先的条件便变成了可接触$l$。咱们把$y=x$改为$y=x+1$,同理可得答案为$C_{n+m}^m - C_{n+m}^{m-1}$。用预处理阶乘、乘法逆元、组合数通项公式等即可求解。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; #define ll long long
const int MAX_N = 2000010;
const ll P = 20100403;
ll Fact[MAX_N]; void GetFact()
{
Fact[1] = 1;
for (int i = 2; i < MAX_N; i++)
Fact[i] = Fact[i - 1] * i % P;
} ll Mult(ll a, ll b)
{
ll ans = 0;
while (b)
{
if (b & 1)
ans = (ans + a) % P;
a = (a + a) % P;
b >>= 1;
}
return ans;
} ll Power(ll a, ll n)
{
ll ans = 1;
while (n)
{
if (n & 1)
ans = Mult(ans, a);
a = Mult(a, a);
n >>= 1;
}
return ans;
} ll Inv(ll x)
{
return Power(x, P - 2);
} ll C(int n, int r)
{
return Fact[n] * Inv(Fact[r] * Fact[n - r] % P) % P;
} int main()
{
GetFact();
int n, m;
scanf("%d%d", &n, &m);
printf("%lld\n", ((C(m + n, m) - C(m + n, m - 1)) % P + P) % P);
return 0;
}

  

luogu1641 [SDOI2010]生成字符串的更多相关文章

  1. Luogu1641 SCOI2010生成字符串(组合数学)

    NOI2018冒泡排序的一个子问题. #include<iostream> #include<cstdio> #include<cmath> #include< ...

  2. C# 生成字符串的 CheckSum

    C# 生成字符串的 CheckSum private static string CheckSum(string message) { char[] chars = message.ToCharArr ...

  3. [SCOI2010]生成字符串

    题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足 ...

  4. c# .Net随机生成字符串代码

    /// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType"> ...

  5. [SCOI2010]生成字符串 题解(卡特兰数的扩展)

    [SCOI2010]生成字符串 Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数 ...

  6. RandomStringUtils工具类(java随机生成字符串)

    使用RandomStringUtils可以选择生成随机字符串,可以是全字母,全数字,自定义生成字符等等... 其最基础的方法: 参数解读: count:需要生成的随机串位数 letters:只要字母 ...

  7. P1641 [SCOI2010]生成字符串

    P1641 [SCOI2010]生成字符串 题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不 ...

  8. java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法

    1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...

  9. BZOJ1856 [SCOI2010]生成字符串 【组合数】

    题目 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足要求 ...

随机推荐

  1. vue基础---条件渲染

    (1)v-if条件渲染 v-if 指令用于条件性地渲染一块内容.这块内容只会在指令的表达式返回 truthy 值的时候被渲染. 可以用 v-else 添加一个“else 块”: ①表达式 <di ...

  2. 使用JS获取request参数

    1.document.write('<%=request.getAttribute("param")%>'); 2.window.navigator.userAgent ...

  3. block:cfq 学习02

    From: https://blog.csdn.net/vanbreaker/article/details/8308766 前文介绍了CFQ调度器的一些概念和结构之间的关系,这里再结合实际的代码,来 ...

  4. 在TWaver的Tree节点上画线

    论坛上有同学提出如何在tree上画引导线,之前我们Flex已经实现此功能,现在最新版的HTML5也将添加此功能.先看看效果:详细的使用方法可以参考我们开发手册中可视化视图组件#Tree引导线一章,下面 ...

  5. php第二十二节课

    AJAX <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  6. NOIP 2006 金明的预算方案(洛谷P1064,动态规划递推,01背包变形,滚动数组)

    一.题目链接:P1064 金明的预算方案 二.思路 1.一共只有五种情况 @1.不买 @2.只买主件 @3.买主件和附件1(如果不存在附件也要运算,只是这时附件的数据是0,也就是算了对标准的结果也没影 ...

  7. UVA - 1618 Weak Key(RMQ算法)

    题目: 给出k个互不相同的证书组成的序列Ni,判断是否存在4个证书Np.Nq.Nr.Ns(1≤p<q<r<s≤k)使得Nq>Ns>Np>Nr或者Nq<Ns&l ...

  8. World Cup(The 2016 ACM-ICPC Asia China-Final Contest dfs搜索)

    题目: Here is World Cup again, the top 32 teams come together to fight for the World Champion. The tea ...

  9. 作为一个程序员,分享一下我自己常用的几款非常方便的chrome插件

    作为一名资深码农,结合身边一群IT民工的真实体验,小编有那么一点权威给各位推荐几款程序员必备.常用的chrome扩展插件. 1.Click&Clean Click&Clean插件可以监 ...

  10. 通过混合编程分析的方法和机器学习预测Web应用程序的漏洞

    通过混合编程分析的方法和机器学习预测Web应用程序的漏洞 由于时间和资源的限制,web软件工程师需要支持识别出有漏洞的代码.一个实用的方法用来预测漏洞代码可以提高他们安全审计的工作效率.在这篇文章中, ...