luogu1641 [SDOI2010]生成字符串
题目大意
把$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]生成字符串的更多相关文章
- Luogu1641 SCOI2010生成字符串(组合数学)
NOI2018冒泡排序的一个子问题. #include<iostream> #include<cstdio> #include<cmath> #include< ...
- C# 生成字符串的 CheckSum
C# 生成字符串的 CheckSum private static string CheckSum(string message) { char[] chars = message.ToCharArr ...
- [SCOI2010]生成字符串
题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足 ...
- c# .Net随机生成字符串代码
/// <summary> /// 随机生成字符串 /// </summary> /// <param name="OperationType"> ...
- [SCOI2010]生成字符串 题解(卡特兰数的扩展)
[SCOI2010]生成字符串 Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数 ...
- RandomStringUtils工具类(java随机生成字符串)
使用RandomStringUtils可以选择生成随机字符串,可以是全字母,全数字,自定义生成字符等等... 其最基础的方法: 参数解读: count:需要生成的随机串位数 letters:只要字母 ...
- P1641 [SCOI2010]生成字符串
P1641 [SCOI2010]生成字符串 题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不 ...
- java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组之间的转换方法
1.java代码中fastjson生成字符串和解析字符串的方法 List<TemplateFull> templateFulls = new ArrayList<TemplateFu ...
- BZOJ1856 [SCOI2010]生成字符串 【组合数】
题目 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足要求 ...
随机推荐
- 梦想MxWeb3D,三维CAD协同设计平台 2019.05.05更新
SDK开发包下载地址: http://www.mxdraw.com/ndetail_20140.html 在线演示网址: http://www.mxdraw.com:3000/ 1. 增加CAD绘图 ...
- 面向对象程序设计--Java语言第一周编程题:分数
分数 题目内容: 设计一个表示分数的类Fraction.这个类用两个int类型的变量分别表示分子和分母. 这个类的构造函数是: Fraction(int a, int b) 构造一个a/b的分数. 这 ...
- Python函数式编程简介
参考原文 廖雪峰Python函数式编程 函数 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程 ...
- MFC 课程总结
<基于MFC框架开发>马志国 1491989781 MFC课程的组成 1.1 MFC应用程序的组成部分.执行机制和执行流程(10.5天). 1.2 Windows平台上的数据库访问技术(1 ...
- Linux mpstat-显示各个可用CPU的状态
更多linux 性能监测与优化 关注:linux命令大全 mpstat命令指令主要用于多CPU环境下,它显示各个可用CPU的状态系你想.这些信息存放在/proc/stat文件中.在多CPUs系统里,其 ...
- Django-Rest framework中文翻译-generic-views
通用视图 Django的通用视图......被开发为常见用法模式的快捷方式......它们采用视图开发中的某些常见习语和模式并对其进行抽象,以便您可以快速编写数据的常用视图,而无需重复自己. - Dj ...
- 腾讯云,搭建Git服务器
下载安装 git 任务时间:5min ~ 10min Git 是一款免费.开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 此实验以 CentOS 7.2 x64 的系统为环境,搭建 ...
- java8的LocalDateTime真心好用(补充Period.between的大坑)
LocalDateTime.LocalDate是java8新增的时间工具类,最近使用后,真心觉得强大好用,推荐文章:https://www.liaoxuefeng.com/article/001419 ...
- 【03】AngularJS 简介
AngularJS 简介 AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面. AngularJS 通过 指令 扩展了 HTML ...
- 吧,其实spring自带的BeanUtils就有这样的功能,引入spring-beans和spring-core之后,就有BeanUtils.copyProperties(a, b);可以实现两个javabean之间的相互拷贝,自己写的就当是研究咯---https://www.cnblogs.com/NieXiaoHui/p/7150928.html
吧,其实spring自带的BeanUtils就有这样的功能,引入spring-beans和spring-core之后,就有BeanUtils.copyProperties(a, b);可以实现两个ja ...