题解:
首先所有位置先-1,然后考虑 m ! m! m!种排列,如果全部后缀和小等于0(前缀和大等于0)那么是个合法排列,否则不合法。
这个时候有个自然的想法就是把小于0的最小的位置(若有多个则选最靠后的)放到这个排列后面,然后就又对应着一个合法的排列了,不过这样做每个合法排列对应的方案可能不一样。
这时候就有个非常妙的做法,就是在最后面放一个-1,这个时候就变成了所有前缀大等于0,最后等于-1。此时我们会发现如果一个前缀小于0的最小位置放到后面后,对应的序列依然是合法序列,而且这个-1变成了另外一个合法序列中间的-1,也就是说一个合法序列会被多算 m − n m-n m−n次(每个-1都被多加的-1对应一次),所以最后的答案是 m ! m − n + 1 \frac{m!}{m-n+1}