爆搜乱搞.
首先可以注意到,操作的顺序是没有影响的.
从小到大考虑每个操作,若操作了 $k$ 次,且最后合法,则这种方案对答案的贡献为 $k!$ .
在第 $i$ 次操作时,我们把序列分成 $2^{n-i}$ 段,每段长度为 $2^i$ ,则可以交换两个 “半段” .
考虑那些不是连续递增的段,必须在当前这次操作处理,否则之后就被合在一起,无法处理了.
若没有这样的段,则不执行操作.
若有 $1$ 个这样的段,就将该段的前后两部分交换,若合法则继续,否则这种情况没有贡献.
若有 $2$ 个这样的段,则一共有 $4$ 个 “半段” 可以用于交换,枚举 $4$ 种交换情况,若合法,则继续 $dfs$ .
若这样的段 $>2$ 个,则一定没有贡献.
最坏情况下每次都要枚举 $4$ 种交换情况,时间复杂度 $O(4^n\cdot n)$ .
1 | //%std |