当前位置: 首页 > news >正文

反射容斥

这个东西有点太牛了,简单写一下。

煮波数学非常烂,所以大多数东西只能感性理解。

首先格路计数,从坐标 $ (0,0) $ 走到 $ (n,m) $ 的路径方案数(只能向右或向上走)为 $ C_{n+m}^{n} $。

考虑组合意义就是你的路径总长度为 $ n+m $,一共要向右走 $ n $ 次,相当于在一个 $ n+m $ 的序列上选 $ n $ 个位置向右走。

现在来看卡特兰数的一个公式 $ Catlan(n) = C_{2n}^n - C_{2n}^{n+1} $。

对着卡特兰数的定义:从 $ (0,0) $ 走到 $ (n,n) $ 且不越过 $ y=x $ 的方案数(即不经过 $ y=x+1 $ 的方案数)。

你考虑对于每一条经过 $ y=x+1 $ 的路径让它们与 $ y=x+1 $ 的第一个交点之后的所有部分关于 $ y=x+1 $ 对称,此时终点在 $ (n-1,n+1) $,那么总方案数即为 $ C_{2n}^{n-1} $。

即可得到卡特兰数的公式。

卡特兰数还有一个递推公式:$ Catlan(n) = \sum\limits_{i=1}^{n-1} Catlan(i) \times Catlan(n-i) $ 。

可以理解为枚举 $ y=x $ 上的每一个点 $ (i,i) $,总方案数即为 $ (0,0) $ 走到 $ (i,i) $ 再从 $ (i,i) $ 走到 $ (n,n) $ 的方案数相乘之和。

吼吼吼我会两条线的反射容斥了!!!

你考虑总方案数为到 $ (n,m) $ 的自由方案数 - 对分别碰到两条线进行容斥之后的方案数。

设两条线分别为 $ A $ 线和 $ B $ 线,每碰到一次 $ A $ 线就给序列增加一个 $ A \(,\) B $ 同理。

那么总的序列就形如 $ ABAABBAAAA \cdots $,把连续的 $ A $ 和 $ B $ 缩成一个之后,序列就是 $ AB $ 交替的了。

这样对 $ A $ 和 $ B $ 分别做一次容斥之后就可以得出答案。

参考代码:

inline void flip(pii &x,int b) {x={x.second-b,x.first+b};}pii pos={n+m+1,n};
int x=1,y=-m-2,res=idx(pos.first,pos.second),op=-1;
while (pos.first>=0 and pos.second>=0) {flip(pos,x),res=(res+idx(pos.first,pos.second)*op+mod)%mod,op*=-1;flip(pos,y),res=(res+idx(pos.first,pos.second)*op+mod)%mod,op*=-1;
}
x=1,y=-m-2,op=-1,pos={n+m+1,n};
while (pos.first>=0 and pos.second>=0) {flip(pos,y),res=(res+idx(pos.first,pos.second)*op+mod)%mod,op*=-1;flip(pos,x),res=(res+idx(pos.first,pos.second)*op+mod)%mod,op*=-1;
}

$ flip $ 函数是将 $ (x,y) $ 关于 $ y=x+b $ 对称。

主函数内的 $ x,y $ 分别是两条不能碰到的直线的截距 $ b_1 $ 和 $ b_2 $。

http://www.sczhlp.com/news/13044/

相关文章:

  • IDEA打开application.properties出现乱码
  • GNU/Linux GPIO学习
  • Template-system 研发成功|远程组件用宿主 React 的完整思路纪要
  • Odoo18滑块验证码系统:从设计到实现的完整技术解析
  • C++练习题链接
  • 面试题
  • 网络层
  • 物理层和数据链路层
  • 456
  • 记忆图片
  • MCU如何进行DDR读写测试?
  • 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 04 - Rainbow
  • 不同主机间通信及网络基础
  • 视频讲解:多层感知机MLP与卷积神经网络CNN在服装图像识别中的应用
  • 单片机异常复位
  • 专题:2025母婴行业洞察报告|附60+份报告PDF汇总下载
  • cad.net 选择集搞坏CAD的问题
  • AGC011 题解
  • colab unsloth 安装出现错误【可行】
  • 视频讲解:ARIMA-LSTM注意力融合模型跨行业股价预测应用
  • 32_1 结构体的学习与练习
  • pytorch+torchvision+python版本对应关系 版本对照表
  • Siderophile:检测Rust代码库中的不安全代码
  • 增量可满足性问题解决方案验证方法
  • 云平台运维工具 —— 阿里云原生工具 - 详解
  • 麒麟系统中离线安装java环境
  • P2822 [NOIP 2016 提高组] 组合数问题
  • 行列式 / 矩阵树定理 笔记
  • Java 开发者必看!JBoltAI 框架让 AI 应用开发效率飙升
  • Java+AI 的黄金搭档!JBoltAI 框架让系统服务焕发新生