Imbalanced Arrays

还没有仔细看官方题解和洛谷题解,重新做的时候看一下有没有什么可以吸收的

说一下我的做法:首先看到第二个条件,不难想出ii只有可能选一个,此时观察样例,以及发现b刚好有n个数,所以不难想到最终b的构造方案是由1 ~ n的每一个数或其相反数组成的,且每个数刚好有一个;接下来先证明其他情况都可以转换为这个情况,然后给出构造方案

如果对于某一种合法的情况,存在绝对值相等的数,那么由鸽巢原理,一定存在一个i[1,n],使得b中没有任何一个数的绝对值为i,考虑b中绝对值离i最近的数(有可能由两个,一个绝对值大于i,另一个绝对值小于i,有对称性不妨考虑绝对值小于i的数),无论这个数有多个还是一个(注意如果这个数有多个,那么这个数对应b中的数一定符号相同),我们将一个它移动到i,显然仍然符合答案;而我们可以通过重复以上操作来将其变成我们要的方案

上面描述太抽象了,举个例子

1 1 -2 -2 5 6

那么取i=3,考虑|2|=2,将一个2移动至3(也就是绝对值变成3),数列变成1 1 -2 -3 5 6,再取i=4,数列变成1 1 -2 -4 5 6,重复,最终数列会变成1 2 -3 -4 5 6

接下来给出构造方案:考虑特殊元素,先考虑n对应哪一个a,如果是n,那么肯定存在一个a的值为n,如果是n,那么肯定存在一个a的值为0,显然这两个不能同时存在,也不可能都不存在,于是填n还是n是唯一确定的,然后删除对应的a;然后考虑数学归纳法,如果我们已经填好了[i+1,n]了,那么对于i,如果我们选择i,那么就存在一个an已经填了的负数的个数,如果选择i,那么就存在一个a为已经填了的正数的个数,显然这两个不能相等(否则的话已经填了的数为n,显然不可能),也不能都不存在,于是填ii也是确定的

可以想一下实现,具体见CF代码,比较简单

posted @   最爱丁珰  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示