total 为奇数,则无法平分为完全相等的两部分,方案数为 0。n = total / 2,表示每名程序员需要承担的工作量。问题转化为:将 n 拆分成 i 个正整数(作为第一名程序员的子任务序列),将另一个 n 拆分成 k - i 个正整数(作为第二名程序员的子任务序列),其中 1 ≤ i ≤ k-1。n 拆分成 m 个正整数之和,且顺序有意义(即拆分序列),其方案数等价于在 n 个 1 之间的 n-1 个空隙中插入 m-1 个隔板,方案数为组合数 C(n-1, m-1)。i,第一部分的方案数为 C(n-1, i-1),第二部分的方案数为 C(n-1, k-i-1)。总方案数即为:
[
\text{ans} = \sum_{i=1}^{k-1} \binom{n-1}{i-1} \times \binom{n-1}{k-i-1} \pmod{10^9+7}
]在一个大型项目开发中,有一个总工作量为 total 的功能模块需要由两名程序员接力完成。为了公平,两人需要完成完全相同的工作量,即每人恰好承担 total/2 的工作。整个实现过程被划分为若干连续的子任务,每个子任务的工作量均为正整数,且子任务的先后顺序具有重要意义。已知子任务的总数为 k,第一名程序员完成前 i 个子任务,第二名程序员完成剩下的 k-i 个子任务。给定 total 和 k,请你计算所有可能的子任务拆分方案数。由于方案数可能很大,请输出对 109+7 取模后的结果。注意:若 total 为奇数,则无法平分工作量,方案数为 0。总工作量 total 满足 1≤total≤2×105,子任务总数 k 满足 1≤k≤total。
输入仅一行,包含两个整数 total 和 k,分别表示总工作量和子任务总数。
输出一个整数,表示方案数对 109+7 取模的结果。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册