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

运输货物题解

小 Z 要用 \(n+1\) 只骡子运送 \(k\) 种物资。每只骡子可以任选物资运输(也可以选择运输 \(0\) 种物资)。

由于骡子并不是马,所以 没有任何一种物资能够同时被 第 \(0\sim n-1\) 只这 \(n\) 只骡子运输。

由于骡子并不是马,所以 第 \(1\sim n\) 只 这 \(n\) 只骡子并不能运输全部的 \(k\) 种物资。

根据以上 骡子并不是马 原则,一共有多少种运输方案?
请给出答案 对 \(10^9+7\) 取模的结果。

共有 \(T\) 组测试数据。

数据范围:
对于所有数据,满足 \(0\le T\le 10^5,3\le n,k\le 10^{18}\)

子任务编号 分值 数据范围
\(1\) \(5pts\) \(T=0\)
\(2\) \(25pts\) \(T\le 10,n,k\le 4\)
\(3\) \(35pts\) \(T=1,n,k\le 3000\)
\(4\) \(35pts\) 无特殊限制

题目可以转化为:
求出满足下列条件的 \(n+1\)\(k\) 列的 \(01\) 矩阵的数量:

  • \(n\) 行(第 \(0\sim n-1\) 行)每列至少存在一个 \(0\)
  • \(n\) 行(第 \(1\sim n\))至少有一列全是 \(0\)

可以发现题意简化后,第 \(1\sim n-1\) 行这 \(n-1\) 行需要满足上面两个条件,因此我们把原矩阵拆成第 \(0\) 行、第 \(1\sim n-1\) 行、第 \(n\) 行三部分进行计数。

首先对于第二部分(第 \(1\sim n-1\) 行),我们需要强制规定一些限制,以方便计数,怎么规定呢?

根据条件,我们可以想出:对于第二部分,设有 \(i\) 列全是 \(0\),有 \(j\) 列全是 \(1\)

列只要别选重,时可以随便选的,因此共有 \(\binom{k}{i}\binom{k-i}{j}\) 种选法。对于没有选到的列,我们随便填即可(别填满 \(0\)\(1\) 了),那么 \(k-i-j\) 没选的列共有 \((2^{n-1}-2)^{k-i-j}\) 种合法方案。

然后分别考虑第一三部分。

对于第一部分:
如果有一列第二部分全放了 \(1\),那么第一部分只能放 \(0\),其他的随便放即可,共 \(2^{k-j}\) 种放法。

对于第二部分:
如果有一列已经放了 \(1\),那么我们在第三部分可以随便放,如果有几列全放了 \(0\),那么我们需要至少留一列放 \(0\),共 \(2^{k-i}(2^i-1)\)

把上面那些东西乘在一块就是:

\[\sum\limits_{i=0}^k\sum\limits_{j=0}^{k-i}\binom{k}{i}\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}2^{k-j}2^{k-i}(2^i-1) \]

这个可以直接 \(\mathcal{O}(k^2)\) 做,但不足以通过本题数据。

我们把能往外放的东西尽量往外放试试,也就是无脑提取公因式:

\[\begin{aligned} YS&=\sum\limits_{i=0}^k\sum\limits_{j=0}^{k-i}\binom{k}{i}\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}2^{k-j}2^{k-i}(2^i-1)\\ &=\sum\limits_{i=0}^k\binom{k}{i}2^{k-i}(2^i-1)\sum\limits_{j=0}^{k-i}\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}2^{k-j}\\ &=2^k\sum\limits_{i=0}^k\binom{k}{i}2^{-i}(2^i-1)\sum\limits_{j=0}^{k-i}\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}2^{k-j} \end{aligned}\]

注:\(YS=\) 原式。

然后就提不动了,考虑使用公式。

该用哪个呢?

\(\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}\) 这个看上去可以二项式定理化简。

但是后面的 \(2^{k-j}\) 的很难受,如果是 \(2^{k-i-j}\) 就好了,我们需要 \(2^{-i}\)

等等!\(2^{-i}\)?这个我们可以从外面拿回来!

于是

\[\begin{aligned} YS&=2^k\sum\limits_{i=0}^k\binom{k}{i}2^{-i}(2^i-1)\sum\limits_{j=0}^{k-i}\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}2^{k-j}\\ &=2^k\sum\limits_{i=0}^k\binom{k}{i}(2^i-1)\sum\limits_{j=0}^{k-i}\binom{k-i}{j}(2^{n-1}-2)^{k-i-j}2^{k-i-j}\\ &=2^k\sum\limits_{i=0}^k\binom{k}{i}(2^i-1)\sum\limits_{j=0}^{k-i}\binom{k-i}{j}[2(2^{n-1}-2)]^{k-i-j}\\ &=2^k\sum\limits_{i=0}^k\binom{k}{i}(2^i-1)[2(2^{n-1}-2)+1]^{k-i}\\ &=2^k\sum\limits_{i=0}^k\binom{k}{i}(2^i-1)(2^n-3)^{k-i}\\ &=2^k\left[\sum\limits_{i=0}^k\binom{k}{i}2^i(2^n-3)^{k-i}-\sum\limits_{i=0}^k\binom{k}{i}(2^n-3)^{k-i}\right]\\ &=2^k[(2^n-1)^k-(2^n-2)^k] \end{aligned}\]

\(j\) 所在的那个 \(\sum\) 化简掉之后 \(2^k\sum\limits_{i=0}^k\binom{k}{i}(2^i-1)(2^n-3)^{k-i}\) 看上去不好化简,但实际上可以直接强拆,再分别用二项式定理化简就行了。

最终答案即为

\[2^k[(2^n-1)^k-(2^n-2)^k] \]

这个可以直接用快速幂做。

http://www.jsqmd.com/news/44775/

相关文章:

  • K8S集群1.30版本怎么执行命令进入容器
  • 不同行业企业如何选择可观测产品?
  • 2025年青岛暑假预习新高一方案权威推荐榜单:青岛新高一暑假没学习培训/青岛新高三暑假数学方案/青岛新初一衔接班方案服务机构精选
  • 赋能智慧商业:国标GB28181算法算力平台EasyGBS构筑大型商场智慧安防新生态
  • 2025年可观测厂商解析:博睿数据如何领跑全球可观测性市场?
  • Joycode 无法跨项目读取源码怎么办?MCP Easy Code Reader 帮你解决!
  • python学习笔记-argparse
  • Codes 创新的低代码接口测试解决方案,让点工也能做好接口自动化测试且效率起飞
  • 2025年均质乳化机订制厂家权威推荐榜单:分散乳化机/管线式乳化机/乳化设备源头厂家精选
  • GAN生成式对抗网络
  • OBET工具使用说明
  • 2025年湖北皮卡车出租公司权威推荐榜单:湖北出租预警车/湖北出租皮卡车服务精选
  • python学习笔记-基础功能和场景功能
  • 2025年重庆科技展示展厅公司权威推荐榜单:博物馆数字展厅/科技展馆/智能全息展馆源头公司精选
  • 一文读懂 PG18 EXPLAIN 新字段:Index Searches
  • java泛型类型通配符
  • 2025年CAN通讯汽车喇叭定做厂家权威推荐榜单:客运汽车喇叭/电动汽车喇叭/货运汽车喇叭源头厂家精选
  • 领嵌iLeadE-588边缘计算网关
  • 2025年11月全年度食品/产品/体系认证机构权威推荐榜单:前十强专业评测与选择指南
  • 建造者-创建型设计模式
  • 深入解析:FFmpeg 核心 API 系列:音频重采样 SwrContext 完全指南(新API版本)
  • http和https区别如何转https - 详解
  • agc050e 题解
  • 阿里云可观测 2025 年 10 月产品动态
  • linux ext4 文件系统
  • linux exit(-1)
  • 奶奶都能看懂的 C++ —— 左值和右值
  • 2025年广东家具海运到悉尼服务商权威推荐榜单:广州海运到悉尼机构/广东家具海运到墨尔本渠道/广东海运到墨尔本公司服务商精选
  • 固废智能分拣项目开发周期
  • 新能源充电桩EMC整改实录:阿赛姆共模电感如何实现12dB衰减