题目描述

lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数。现在lxhgww想要知道满足要求的字符串共有多少个,聪明的程序员们,你们能帮助他吗?

输入

输入数据是一行,包括2个数字n和m

输出

输出数据是一行,包括1个数字,表示满足要求的字符串数目,这个数可能会很大,只需输出这个数除以20100403的余数

样例输入

2 2

样例输出

2

提示

【数据范围】
对于30%的数据,保证1<=m<=n<=1000
对于100%的数据,保证1<=m<=n<=1000000

将选$1$看成往右走,选$0$看成往上走,那么要求的就是从$n*m$的网格的左下角走到右上角且不能穿过$y=x$的方案数。

将不能穿过$y=x$看成不能走到$y=x+1$,答案就是总方案数(即没有不能穿过$y=x$限制的方案数)-走到$y=x+1$的方案数。

将起点关于$y=x+1$对称到$(-1,1)$,那么走到$y=x+1$的方案数就是从$(-1,1)$走到$(n,m)$只能往右和往上走的方案数。

最终答案就是$C_{n+m}^{n}-C_{n+m}^{n+1}$,注意当$n<m$时答案为$0$。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<bitset>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int mod=20100403;
int n,m;
int fac[2000010];
int inv[2000010];
int C(int n,int m)
{return 1ll*fac[n]*inv[m]%mod*inv[n-m]%mod;
}
int main()
{scanf("%d%d",&n,&m);inv[0]=inv[1]=fac[0]=fac[1]=1;for(int i=2;i<=n+m;i++){fac[i]=1ll*fac[i-1]*i%mod;inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;}for(int i=2;i<=n+m;i++){inv[i]=1ll*inv[i-1]*inv[i]%mod;}if(n>=m){printf("%d",(C(n+m,n)-C(n+m,n+1)+mod)%mod);}else{printf("0");}
}

转载于:https://www.cnblogs.com/Khada-Jhin/p/10954692.html

BZOJ1856[Scoi2010]字符串——组合数学+容斥相关推荐

  1. P6076-[JSOI2015]染色问题【组合数学,容斥】

    正题 题目链接:https://www.luogu.com.cn/problem/P6076 题目大意 给出n∗mn*mn∗m的网格,ccc种颜色涂色要求 每个格子可以染色也可以不染 每一行每一列至少 ...

  2. 组合数学 —— 容斥定理

    [概述] 容斥原理是一种较常用的计数方法,其基本思想是:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无重复. 容斥原理 ...

  3. 【组合数学--容斥】CodeTON Round 3 (Div. 1 + Div. 2, Rated, Prizes!) D. Count GCD

    大概思路想出来了,就差不会写容斥了.... 题意: 思路: 这是一开始的思路: 推到最后就是求在区间[1,m/a[i+1]中有多少k2满足以下条件,gcd(k1,k2)=1,k1是一个定值 这就是容斥 ...

  4. BZOJ1856:[SCOI2010]字符串

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

  5. loj#2542 [PKUWC2018]随机游走 (概率期望、组合数学、子集和变换、Min-Max容斥)

    loj#2542 [PKUWC2018]随机游走 (概率期望.组合数学.子集和变换.Min-Max容斥) 很好很有趣很神仙的题! 题目链接: https://loj.ac/problem/2542 题 ...

  6. CodeForces - 1425D Danger of Mad Snakes(容斥+组合数学)

    题目链接:点击查看 题目大意:初始时有一个二维平面, 平面上给出 n 条蛇,现在可以选择 m 条不同的蛇进行捕杀,当选择了某条蛇,其所在的坐标可以覆盖到的半径为 r 的范围内的蛇都会被捕杀,更确切的说 ...

  7. LOJ #2542 [PKUWC2018]随机游走 (概率期望、组合数学、子集和变换、Min-Max容斥)

    很好很有趣很神仙的题! 题目链接: https://loj.ac/problem/2542 题意: 请自行阅读 题解首先我们显然要求的是几个随机变量的最大值的期望(不是期望的最大值),然后这玩意很难求 ...

  8. 模板:广义二项式反演/广义容斥(组合数学)

    文章目录 前言 经典容斥原理 广义二项式反演/广义容斥 min-max 容斥 所谓二项式反演,就是对两个项的式子进行反演. (逃) 前言 期望和容斥是我的感性二兄弟! 之前的容斥我基本也都是靠感性理解 ...

  9. 洛谷P3270:成绩比较(容斥、组合数学)

    解析 依然不会亚qwq 但这次至少有点上道了 (指推出了一个会导致重复计数的错误式子) 首先,我们要选出碾压那些人,方案数就是Cn−1kC_{n-1}^kCn−1k​ 然后,我们要统计每门学科的排名情 ...

最新文章

  1. Linux驱动框架之framebuffer驱动框架
  2. MOS管电源开关电路的软启动
  3. 数据库acid简介(一)
  4. 多线程编程之线程同步主要函数一览
  5. c++/c SM4加密解密算法代码实现
  6. php回调函数如何执行顺序,PHP回调函数调用方式
  7. 从C ++定义QML类型
  8. go build编译不同环境
  9. oracle无效的关联运算符,菜鸟请教:关联操作符=>用法
  10. java Spring Boot中使用Swagger2构建API文档
  11. M1 三合一机床电路故障检测
  12. postgreSQL源码分析综述
  13. Atitit 知识发现 艾提拉总结 目录 1. 知识发现 1 1.1. 与数据挖掘的区别与联系 数据挖掘的一种更广义的说法 2 1.2. 基本任务 3 1.2.1. 数据分类 3 1.2.2.
  14. java poi xml转word文档_使用POI转换word doc文件
  15. 关于多个Jenkins实例共享同一个工作目录的问题
  16. 近红外荧光染料IRDye 650 NHS Ester/NHS活化酯
  17. 阿里云服务器调用微信支付接口慢的解决方案 (api.mch.weixin.qq.com)
  18. csm和uefi_[整理]BIOS设置UEFI和安全引导
  19. Linux7/Centos7磁盘分区、格式化及LVM管理
  20. BLE Mesh (8) —— Friendship

热门文章

  1. CSS-10-内边距
  2. jq修改导航栏样式(选中、使用两张图片替代的是否选中效果)
  3. Spring 使用介绍(十二)—— Spring Task
  4. vijos 观光旅游 最小环fl 呆详看
  5. 人工智能中的局部搜索算法
  6. AppiumDriver java部分api
  7. 黑马程序员-----集合框架类(四) 高级for循环、方法的可变参数及静态导入
  8. 函数传参和实际应用—JS学习笔记2015-6-5(第49天)
  9. 禾川触摸屏编程软件_汇川PLC编程PLC代写程序
  10. 激活层是每一层都有吗_89小户型复式这样装,每一层都设计得很棒,完工后秒变小区样板间,邻居前来取经...