orz qyc
小 A,小 B,小 C 在玩游戏。他们每个人分别有 (n,m,k) 张牌,每张牌上面写着 (a,b,c) 三个字母中的其中一个,每个回合有一个人出牌,如果出牌为 (a) 则小 A 下一个回合出牌,如果出牌为 (b) 则小 B 下一个回合出牌,小 C 同理。若轮到某位玩家出牌时,其手中无牌,则该位玩家获胜。
现在小 A 第一个出牌,对所有 (3^{n+m+k}) 种手牌拥有的可能性计算小 A 获胜的方案数,对 (10^9+7) 取模。
如果按照打出的顺序排成一个长度为 (l) 的序列,小 A 获胜当且仅当:(a) 恰好出现了 (n) 次且在最后一次出现,(b) 出现了不多于 (m) 次,(c) 出现了不多于 (k) 次。
而这个长度为 (l) 的序列对应了 (3^{n+m+k-l}) 种手牌拥有的情况。
(n) 次是一定打的,枚举 (b,c) 出现的次数 (t),然后枚举 (b) 出现的次数 (i):
[sum_{t=0}^{m+k}inom{n+t-1}{n-1}3^{m+k-t}sum_{i=t-k}^{m}inom{t}{i}
]
第一个组合数是除了最后一个是 (a),确定 ((n-1)) 个 (a) 的位置,(3^{m+k-t}) 是计算的对应了多少种手牌拥有情况,最后一个组合数为在 (t) 个 (b,c) 都可以填的空位挑出 (i) 个填 (b),注意这个组合数可能会出现 (i<0) 或 (i>t) 的情况,由于是考虑其实际的组合意义,所以当出现这样的情况时视为 (0).
最后一个实际上是组合数一行的区间和,众所周知这个的计算是困难的,由于这个区间和的形式比较特殊,考虑递推出这个东西:
[egin{aligned}
S(t)=&sum_{i=t-k}^{m}inom{t}{i}
\
=&sum_{i=t-k}^{m}inom{t-1}{i-1}+sum_{i=t-k}^{m}inom{t-1}{i}
\
=&sum_{i=t-k-1}^{m-1}inom{t-1}{i}+sum_{i=t-k}^{m}inom{t-1}{i}
\
=& 2cdotsum_{i=t-k-1}^{m}inom{t-1}{i}-inom{t-1}{m}-inom{t-1}{t-k-1}
\
=& 2cdot S(t-1)-inom{t-1}{m}-inom{t-1}{t-k-1}
end{aligned}
]
至此,可以在 (mathcal{O}(n+log mod)) 的时间复杂度内解决问题。