1. 程式人生 > 其它 >B. Hemose Shopping codeforces 1592 B

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都超過邊界的,除非本來有序,否則無解。

需要的知識:腦補能力,分類討論;