欢迎光临散文网 会员登陆 & 注册

洛谷竞赛题目讲解_P1641(排列组合 + 整数乘法逆元)

2022-10-20 10:46 作者:Clayton_Zhou  | 我要投稿

AC代码

https://www.luogu.com.cn/record/90637978

题意:

把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,

1的个数不能少于0的个数。 求符合条件字符串 个数。

题解:

排列组合 + 整数乘法逆元

可以考虑把1的个数与0的个数的和看成x坐标,

1的个数与0的个数的差看成y坐标 :


向右上走(x坐标加1,y坐标加1)就表示这个字符选择1。

向右下走(x坐标加1,y坐标减1)就表示这个字符选择0。

这样子,如果不考虑限制条件,就表示从(0,0)走n+m步到达(n+m,n-m),

这相当于从n+m步中选出m步向右下走,也就是组合数C(n+m,m)。

考虑限制条件,任意前缀中1的个数不少于0的个数,也就是这条路径不能经过直线y=-1。

可以通过对称性发现,从(0,0)走到直线y=-1上的一点,相当于从(-2, 0)走到该点。

也就是说,路径经过直线y=-1的方案数就是从(-2, 0)走n+m步到达(n+m,n-m),

这个方案数可以用组合数表示为C(n+m,m-1),  右下走的步数减一


洛谷竞赛题目讲解_P1641(排列组合 + 整数乘法逆元)的评论 (共 条)

分享到微博请遵守国家法律