传送门

如果有n==m的条件就是卡特兰数。

但现在n不一定等于m。

我们可以考虑用求卡特兰数一样的方法来求答案。

我们知道有一种求卡特兰数的方法是转到二维平面求答案。

这道题就可以这样做。

我们将这个序列映射到二维平面上。

相当于从(0,0)(0,0)(0,0)出发,每次只能向右上方或者向右下方走对应着选1/0,最后应该停在(n+m,n−m)(n+m,n-m)(n+m,n−m)。

但这样会出现非法状态。

如何排除?

我们发现如果出现非法状态一定会穿过直线y=−1y=-1y=−1,这样我们把图像关于y=−1y=-1y=−1翻折,起点就变成了(0,−2)(0,-2)(0,−2)。

这样总方案数是(n+mn)\binom {n+m} {n}(nn+m​),不合法的就是(n+mm−1)\binom {n+m} {m-1}(m−1n+m​)。

代码:

#include<bits/stdc++.h>
#define mod 20100403
#define ll long long
using namespace std;
inline ll ksm(ll x,int p=mod-2,ll ret=1){
	while(p){
		if(p&1)ret=ret*x%mod;
		x=x*x%mod,p>>=1;
	}
	return ret;
}
ll n,m;
inline ll C(ll x,ll y){
	ll ret=1,tmp=1;
	for(int i=1;i<=x;++i)ret=ret*i%mod;
	for(int i=1;i<=y;++i)tmp=tmp*i%mod;
	(ret*=ksm(tmp))%=mod,tmp=1;
	for(int i=1;i<=x-y;++i)tmp=tmp*i%mod;
	return (ret*ksm(tmp))%mod;
}
int main(){
	scanf("%lld%lld",&n,&m);
	printf("%lld",(C(n+m,n)-C(n+m,m-1)+mod)%mod);
	return 0;
}

2018.09.25 bzoj1856: [Scoi2010]字符串(组合数学)的更多相关文章

  1. BZOJ1856[Scoi2010]字符串——组合数学+容斥

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

  2. BZOJ1856:[SCOI2010]字符串(卡特兰数,组合数学)

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

  3. [BZOJ1856][SCOI2010]字符串(组合数学)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1856 分析:http://www.cnblogs.com/jianglangcaiji ...

  4. BZOJ1856 [Scoi2010]字符串 数论

    原文链接http://www.cnblogs.com/zhouzhendong/p/8084577.html 题目传送门 - BZOJ1856 题意概括 找出由n个1,m个0组成的字符串,且任意前几个 ...

  5. BZOJ1856[SCOI2010]字符串

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

  6. 2018.09.25 poj2068 Nim(博弈论+dp)

    传送门 题意简述:m个石子,有两个队每队n个人循环取,每个人每次取石子有数量限制,取最后一块的输,问先手能否获胜. 博弈论+dp. 我们令f[i][j]f[i][j]f[i][j]表示当前第i个人取石 ...

  7. bzoj千题计划299:bzoj1856: [Scoi2010]字符串

    http://www.lydsy.com/JudgeOnline/problem.php?id=1856 卡特兰数 从(1,1)走到(n,m),不能走y=x 上方的点,求方案数 从(1,1)走到(n, ...

  8. 2018.09.25 bzoj2286: [Sdoi2011]消耗战(虚树+树形dp)

    传送门 又一道虚树入门题. 这个dp更简单啊. 直接记录每个点到1的距离,简单转移就行了. 代码: #include<bits/stdc++.h> #define N 250005 #de ...

  9. 2018.09.25 bzoj3572: [Hnoi2014]世界树(虚树+树形dp)

    传送门 虚树入门题? 好难啊. 在学习别人的写法之后终于过了. 这道题dp方程很好想. 主要是不好写. 简要说说思路吧. 显然最优值只能够从子树和父亲转移过来. 于是我们先dfs一遍用儿子更新父亲,然 ...

随机推荐

  1. leetcode404

    /** * Definition for a binary tree node. * public class TreeNode { * public int val; * public TreeNo ...

  2. 23.OGNL与ValueStack(VS)-调用普通类的构造方法

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 建立一个新的类:Student,在此省略代码. 然后在loginSuc.js ...

  3. c++builder 代码模板 code templates

    c++builder6.0  MENU:Tools>Editor Options>Code Insight>Code templates XE6 c++builder D:\Prog ...

  4. 前端开发-4-HTML-table&form&表单控制 标签

    1.table标签 <!DOCTYPE html> <html lang="cn"> <head> <meta charset=" ...

  5. C#--数组、字符与字符串--StringBuilder类、字符与字符串、字符及转义字符

    C#--数组 字符与字符串--StringBuilder类 字符与字符串 字符及转义字符

  6. request传递参数

    当客户请求时,Servlet容器创建SrevletRequest对象(用于封装客户的请求信息),这个对象将被容器作为service()方法的参数之一传递给Srevlet,Servlet可以利用Serv ...

  7. Delphi笔记-自定义提示窗口

    unit pbHint; interface uses Windows, Controls, Forms, Graphics; type TPBHint=class(THintWindow) //要自 ...

  8. 把AVI存在资源中用TAnimate播放

    Animate1.RESName := 'About';  Animate1.Active := True;

  9. 更新日志(建议升级到2017.1.18a) && 更新程序的方法

    更新程序的步骤: 1,在控制面板里点击备份当前数据库文件到磁盘,把当天获取的信息从内存写到磁盘/存储卡.2,下载最新版的源码 wget -O "infopi.zip" " ...

  10. web程序的配置文件的修改

    vs上面的config与wwwroot中的config有可能不一样,注意修改配置的资源路径及ip及数据库及禁止ip