还没有仔细看官方题解和洛谷题解,重新做的时候看一下有没有什么可以吸收的
说一下我的做法:首先看到第二个条件,不难想出和只有可能选一个,此时观察样例,以及发现刚好有个数,所以不难想到最终的构造方案是由 ~ 的每一个数或其相反数组成的,且每个数刚好有一个;接下来先证明其他情况都可以转换为这个情况,然后给出构造方案
如果对于某一种合法的情况,存在绝对值相等的数,那么由鸽巢原理,一定存在一个,使得中没有任何一个数的绝对值为,考虑中绝对值离最近的数(有可能由两个,一个绝对值大于,另一个绝对值小于,有对称性不妨考虑绝对值小于的数),无论这个数有多个还是一个(注意如果这个数有多个,那么这个数对应中的数一定符号相同),我们将一个它移动到,显然仍然符合答案;而我们可以通过重复以上操作来将其变成我们要的方案
上面描述太抽象了,举个例子
如1 1 -2 -2 5 6
那么取,考虑,将一个移动至(也就是绝对值变成),数列变成1 1 -2 -3 5 6
,再取,数列变成1 1 -2 -4 5 6
,重复,最终数列会变成1 2 -3 -4 5 6
接下来给出构造方案:考虑特殊元素,先考虑对应哪一个,如果是,那么肯定存在一个的值为,如果是,那么肯定存在一个的值为,显然这两个不能同时存在,也不可能都不存在,于是填还是是唯一确定的,然后删除对应的;然后考虑数学归纳法,如果我们已经填好了了,那么对于,如果我们选择,那么就存在一个为已经填了的负数的个数,如果选择,那么就存在一个为已经填了的正数的个数,显然这两个不能相等(否则的话已经填了的数为,显然不可能),也不能都不存在,于是填和也是确定的
可以想一下实现,具体见CF代码,比较简单
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构