這道題目不用寫,因為必須要求用kotlin語言
講一下我做這道題目的過程
我最開始正著想,如果\(k\)比較大的話,我們就想一次刪的數少一點,所以考慮一次操作有哪些數被保留,於是我們發現,原序列的極大值點會被保留,於是一次操作被保留的數最多的情況就是如下的波浪形:
然後我們就發現正著想很難構造了,於是我們就倒著想:
最後一次刪完了的序列是這樣:$$[n]$$
我們考慮倒數第二次刪完之後序列長成什麼樣,我們有個直覺就是越大的數越在後面被刪除,於是我們考慮此時剩下的數是\(n-1\),也就是說序列此時是這樣:$$[n-1,n]$$
那麼對於倒數第三次,為了讓上面兩個數都不刪除,我們必須要在中間插入\(n-2\),即$$[n-1,n-2,n]$$
這也就是正著想的時候,我們想要構造波浪形
同理第四次即$$[n-1,n-3,n-2,n-4,n]$$
在這樣一直插入下去;如果說插入了\(1\)但是\(k\)次操作還沒有用完,那麼就是無解,否則的話,當\(k\)次操作用完的時候,我們將剩餘的還沒有插入的數,按照\([1,2,3,...]\)這樣的順序放在序列最前面即可
我們的構造方法與官方題解一樣,但是官方題解的思路卻跟我們完全不一樣,但是是對我們的構造方法的嚴謹證明