B. Hemose Shopping codeforces 1592 B
阿新 • • 發佈:2021-10-04
題意中
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都超過邊界的,除非本來有序,否則無解。
需要的知識:腦補能力,分類討論;