B. Hemose Shopping codeforces 1592 B

题意中

x<=n<=1e5;

#设想n非常大

那x就没啥用了,如果一个数a,理应和b换,但是a与b之间的距离小于x,我们可以借助一个和a,b的距离大于x的变量作为中介;

#但是n再小一点,比如n==x,就一点也动不了了,除非本来就是合法的。

#那么在无穷大和x之间,有一个比较尴尬的地带

取n==2x,那么可以留出第一位和最后一位作为中介,

对于位置<x的数,可以用最后一位为中介;

对于位置>x的数,可以用第一位为中介;

如果n>2x,选择就更充裕了。

#在n<=2x和n>=x之间

上面找中介的思路也可以拓展:

设想在第一位的需要中介,那么我们可以找到距离它刚好为x的数,从这个数开始到结尾都是合法的,

想象位数往右挪~合法的区间越来越小了

直到某个数它找不到中介了...

在找不到之前,都可以拿最后一位来当中介。

因为是左右对称的,所以右边也同理。右边可以拿第一位来当中介。

那么除了两头,能换的都换了。(第一可以和最后一位换)

对于中间无论+x还是-x都超过边界的,除非本来有序,否则无解。

 

需要的知识:脑补能力,分类讨论;

posted @ 2021-10-04 17:38  liyishui  阅读(45)  评论(0编辑  收藏  举报