还没有仔细看官方题解和洛谷题解,重新做的时候看一下有没有什么可以吸收的
说一下我的做法:首先看到第二个条件,不难想出\(i\)和\(-i\)只有可能选一个,此时观察样例,以及发现\(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\),那么就存在一个\(a\)为\(n-\)已经填了的负数的个数,如果选择\(-i\),那么就存在一个\(a\)为已经填了的正数的个数,显然这两个不能相等(否则的话已经填了的数为\(n\),显然不可能),也不能都不存在,于是填\(i\)和\(-i\)也是确定的
可以想一下实现,具体见CF代码,比较简单
标签:存在,那么,数列,Arrays,一个,绝对值,Imbalanced,考虑 From: https://www.cnblogs.com/dingxingdi/p/18313137