BZOJ原题链接

洛谷原题链接

可以将\(1\)和\(0\)的个数和看成是\(x\)轴坐标,个数差看成\(y\)轴坐标。

向右上角走,即\(x\)轴坐标\(+1\),\(y\)轴坐标\(+1\),表示这一位为\(1\)。

向右下角走,即\(x\)轴坐标\(+1\),\(y\)轴坐标\(-1\),表示这一位为\(1\)。



若不考虑题目中的限制,那么这就相当于从\((0, 0)\)出发,走\(n + m\)步到达\((n + m, n - m)\)。

相当于从\(n + m\)步中选出\(n\)步向右上走,所以方案数为\(C_{n + m} ^ n\)。

然后考虑有限制的情况,题目要求在任意的前\(k\)个字符中,\(1\)的个数不能少于\(0\)的个数,在坐标轴上的意义就是不能走到\(y = -1\)这一条线。

于是我们考虑计算出违规情况的方案数,可以将走到\(y = -1\)这条线之前的路线翻折过来。



由于翻折过来会导致向右上走变成向右下走,向右下走变成向右上走,即\(1\)变成\(0\),\(0\)变成\(1\),所以违规情况就相当于有\(n + 1\)个\(1\),\(m - 1\)个\(0\)组成字符串的数量,方案数为\(C_{n + m} ^ {n + 1}\)。

所以最后的答案就是\(C_{n + m} ^ n - C_{n + m} ^ {n + 1}\),略化简下就是\(\dfrac{(n - m + 1) \times \prod\limits_{i = m + 1} ^ {n + m} i }{(n + 1)!}\)。

求出\((n + 1)!\)的逆元,然后直接全部乘再一起即可,逆元可用费马小定理求。

#include<cstdio>
using namespace std;
const int N = 1e6 + 10;
const int mod = 20100403;
inline int re()
{
int x = 0;
char c = getchar();
bool p = 0;
for (; c < '0' || c > '9'; c = getchar())
p |= c == '-';
for (; c >= '0' && c <= '9'; c = getchar())
x = x * 10 + c - '0';
return p ? -x : x;
}
int ksm(int x, int y)
{
int s = 1;
for (; y; y >>= 1, x = 1LL * x * x % mod)
if (y & 1)
s = 1LL * s * x % mod;
return s;
}
int main()
{
int i, n, m, s = 1, dv = 1;
n = re();
m = re();
for (i = 2; i <= n + 1; i++)
dv = 1LL * dv * i % mod;
for (i = m + 1; i <= m + n; i++)
s = 1LL * s * i % mod;
printf("%lld", 1LL * s * (n - m + 1) % mod * ksm(dv, mod - 2) % mod);
return 0;
}

BZOJ1856或洛谷1641 [SCOI2010]生成字符串的更多相关文章

  1. 洛谷 1641 [SCOI2010]生成字符串

    题目戳这里 一句话题意 求\(C_{m+n}^{m}\)-\(C_{m+n}^{m-1}\) Solution 巨说这个题目很水 标签居然还有字符串? 但是我还不很会用逆元真的太菜了,还好此题模数P为 ...

  2. 卡特兰数 洛谷P1641 [SCOI2010]生成字符串

    卡特兰数 参考博客 介绍 卡特兰数为组合数学中的一种特殊数列,用于解决一类特殊问题 设\(f(n)\)为卡特兰数的第n项 其通项公式为 \[f(n)=\frac{2n\choose n}{n+1} \ ...

  3. 洛谷 P1641 [SCOI2010]生成字符串

    洛谷 这题一看就是卡塔兰数. 因为\(cnt[1] \leq cnt[0]\),很显然的卡塔兰嘛! 平时我们推导卡塔兰是用一个边长为n的正方形推的, 相当于从(0,0)点走到(n,n)点,向上走的步数 ...

  4. Luogu 1641[SCOI2010]生成字符串 - 卡特兰数

    Description 有$N$ 个 $1$ 和 $M$ 个 $0$ 组成的字符串, 满足前 $k$ 个字符中 $1$ 的个数不少于 $0$ 的个数. 求这样字符串的个数. $1<=M < ...

  5. Luogu 1641 [SCOI2010]生成字符串

    结果和dp没有一点关系…… 30分算法:设$f_{i, j}$表示已经选了$i$个并且有$j$个是白色的状态数,转移显然,最后答案就是$f_{n + m, m}$,时间复杂度$O(n^{2})$. 1 ...

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

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

  7. P1641 [SCOI2010]生成字符串

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

  8. 【解题报告】洛谷 P2571 [SCOI2010]传送带

    [解题报告]洛谷 P2571 [SCOI2010]传送带今天无聊,很久没有做过题目了,但是又不想做什么太难的题目,所以就用洛谷随机跳题,跳到了一道题目,感觉好像不是太难. [CSDN链接](https ...

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

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

随机推荐

  1. webuploader.js

    PHP  多图上传,图片批量上传插件,webuploader.js,百度文件上传插件(案例教程) WebUploader作用: 使用WebUploader还可以批量上传文件.支持缩略图等等众多参数选项 ...

  2. Linux下SVN server 的使用及权限配置

    [Linux下SVN server 的使用及权限配置] 参考:http://www.cnblogs.com/heinoc/p/3805779.html

  3. camstar --调用自定义的CDO报帐号没有执行权限的错误

    解决: 访问站点--〉modeling-->role-->Default Modeling-->筛选(如:modeling or Inquiry) 在右边找到自己定义的CDO(ser ...

  4. 【Spider】学习使用XMLFeedSpider

    前面写了学习CrawlSpider遇到的问题后,今天学XMLFeedSpider又出现了启动后没爬取到数据,但又不报错的情况 经过排查,发现又是一个粗心大意的错误: class SpiderUserX ...

  5. centos磁盘满了,查找大文件并清理

    今天发现vps敲入crontab -e 居然提示 “Disk quota exceeded” 无法编辑.于是"df -h"查了查发现系统磁盘空间使用100%了.最后定位到是/var ...

  6. c++ 读入优化、输出优化模板

    0. 在有些输入数据很多的变态题中,scanf会大大拖慢程序的时间,cin就更慢了,所以就出现了读入优化.其原理就是一个一个字符的读入,输出优化同理,主要使用getchar,putchar函数. 1. ...

  7. @RequestMapping使用须知

    ----------------------siwuxie095 @RequestMapping 使用须知 使用 @RequestMapping 注解映射请求路径 即 你可以使用 @RequestMa ...

  8. HDU 6214 Smallest Minimum Cut(最少边最小割)

    Problem Description Consider a network G=(V,E) with source s and sink t. An s-t cut is a partition o ...

  9. Django具体操作(四)

    自定义模板语法的标签 首先在django的项目中创建app并且在settings中添加了APP的名称. 在app添加templatetags模块(名字是固定的,也就是说,必须要这样) 如图如何自定义呢 ...

  10. width多少,超过了用....表示

    maxWidth:'140px',whiteSpace:'nowrap',overflow:'hidden',textOverflow:'ellipsis'