原题
翻译
我们先想一下若干全是 −1 怎么做
我们可以一层一层的考虑。对于最后一层,我们可以发现 (n2,n] 这些数每对位置应该恰好有一个,因此我们可以计算出方案数为 (n2)!×2n2 ,其中前面指 (n2,n] 的全排列方案数,后面 2n2 则指对于一对位置放在哪一个
然后我们考虑如果不全是 −1 怎么做
我们可以发现如果有一个数字 ai>n2 ,则他的位置是固定的,我们即不用考虑他的全排列,也不用考虑他放在一对中的哪个位置;但是这还没完,如果有个数字ai≤n2 ,则他虽然不会影响到排列的方案书,但对于他所在的对中,另一个数的位置是确认的
因此不妨设当前这层中ai>n2 的数有 num1 个, ai≤n2 的数有 num0 个,则我们可以得到这一层的方案数为 (n2−num1)!×2n2−num0−num1
因此我们只需要预处理出在某一范围内的数字有多少个即可,最终复杂度O(n+k)
哦懂了懂了,等比数列求和。
(3) 到 (4) 是怎么转移的,大佬orz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?