我们先考虑r=0的情况。首先我们以将编号为1的绿球为首位,将环变成链。剩下的绿球和蓝球可以通过把答案乘上阶乘变成无编号的。那么问题变为将b个蓝球分成g段,每段至少q个。首先我们给每段放入q个球,剩下的b-gq个球可以随便放,方案数为$C(b-g\cdot q+q-1,q-1)$。 接下来考虑一般情况。如果p=0,我们就按以上做法放完绿球和蓝球,然后把红球插进去就行了。如果p>0,我们先按以上做法放完红球和绿球。放蓝球的时候,g段中有r段中多了一个红球。我们考虑枚举有k个红球满足它(段内)左侧有至少q个蓝球。那么这k个红球就会让段数+=k,而剩余的r-k个红球会让答案乘上qr-k(因为每个红球有q个位置可以放),方案数就是 $C(b-g \cdot q+q+k-1,q+k-1) \cdot qr-k$。 时间复杂度O(tr+g+b)