首先观察样例,不难发现有可能k为奇的时候无解
证明:《离散数学》中有一道题目的trick是|i−j|与i+j的奇偶性相同,所以曼哈顿排列的奇偶性与p1+1+p2+2+...+pn+n=2(1+2+3+...+n),后者显然为偶数,所以k为奇时无解
其次一个很自然的想法就是当p为[n,n−1,n−2,...,3,2,1]时,曼哈顿排列最大,所以当k超过最大值的时候无解
证明:用反证法证明。如果存在pi<pj,i<j,那么交换pi和pj之后分类讨论可知答案不会更差
其余情况可以知道k都有解,下面考虑构造
一个比较自然的想法就是先快速接近k,依靠曼哈顿排列最大的时候,此时贡献分别为2(n−1),2(n−3),...,每次计算贡献的时候都将k减掉对应的贡献,某一时刻k小于当前时刻的贡献的时候,由于k为偶数,所以将k/2,然后对当前数i找到i+k2即可,剩下的数都不错排
看不懂见代码,比较easy
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构