Luogu P2678 跳石頭 二分

2022-05-20 02:38:47 字數 1358 閱讀 6799

p2678 跳石頭

一年一度的「跳石頭」比賽又要開始了!

這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大岩石。組委會已經選擇好了兩塊岩石作為比賽起點和終點。在起點和終點之間,有\(n\)塊岩石(不含起點和終點的岩石)。在比賽過程中,選手們將從起點出發,每一步跳向相鄰的岩石,直至到達終點。

為了提高比賽難度,組委會計畫移走一些岩石,使得選手們在比賽過程中的最短跳躍距離盡可能長。由於預算限制,組委會至多從起點和終點之間移走\(m\)塊岩石(不能移走起點和終點的岩石)。

第一行包含三個整數\(l,n,m\),分別表示起點到終點的距離,起點和終點之間的岩石數,以及組委會至多移走的岩石數。保證\(l \geq 1\)且\(n \geq m \geq 0\)。

接下來\(n\)行,每行乙個整數,第\(i\)行的整數\(d_i(0,表示第\(i\)塊岩石與起點的距離。這些岩石按與起點距離從小到大的順序給出,且不會有兩個岩石出現在同乙個位置。

乙個整數,即最短跳躍距離的最大值。

25 5 2211

1417

21

4
輸入輸出樣例\(1\)說明:將與起點距離為\(2\)和\(14\)的兩個岩石移走後,最短的跳躍距離為\(4\)(從與起點距離\(17\)的岩石跳到距離\(21\)的岩石,或者從距離\(21\)的岩石跳到終點)。

另:對於\(20 \%\)的資料,\(0 \leq m \leq n \leq 10\)。

對於\(50 \%\)的資料,\(0 \leq m \leq n \leq 100\)。

對於\(100 \%\)的資料,\(0 \leq m \leq n \leq 50,000, \ 1 \leq l \leq 1,000,000,000\)。

臥槽czk又是\(rank \ 1\)。 --alecli

最近一直在學二分答案呢,發現有不少的題目都可以用二分答案來解決。

這題一開始想到的是貪心,拆去所有距離最近的石頭,不過這就要列舉拆除哪一塊石頭,時間複雜度難以保證。除非我們使用模擬退火演算法。

考慮二分答案。對於每次二分出的答案,我們來判斷至少需要拆除多少石頭,那麼這就是個常數十分之小的\(o(n \log n)\)演算法,可以完美解決這一題。

#includeusing namespace std;

const int maxn=5e4+5;

int l,n,m,l,r,ans,a[maxn],b[maxn];

int read()

bool check(int dis)

printf("%d",ans);

return 0;

}

P2678 跳石頭 二分

題目背景 一年一度的 跳石頭 比賽又要開始了 題目描述 這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大岩石。組委會已經選擇好了兩塊岩石作為比賽起點和終點。在起點和終點之間,有 nnn 塊岩石 不含起點和終點的岩石 在比賽過程中,選手們將從起點出發,每一步跳向相鄰的岩石,直至到達終點。為了提高...

洛谷2678 跳石頭 二分驗證

題目背景 一年一度的 跳石頭 比賽又要開始了 題目描述 這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大岩石。組委會已經選擇好了兩塊岩石作為比賽起點和終點。在起點和終點之間,有 n 塊岩石 不含起點和終 點的岩石 在比賽過程中,選手們將從起點出發,每一步跳向相鄰的岩石,直至到達 終點。為了提高...

P2678 跳石頭(貪心 二分答案)

題目描述 分析遇到最短距離的最大值,用二分 通過遍歷最短跳躍距離來用貪心策略計算需要挪走的岩石,來與m值比較。直接遍歷超時,用二分法。首先,二分的範圍 最短為岩石之間或者岩石與岸邊的最小距離 最大為整個比賽的長度。由題意得,最短跳躍距離越大,需要挪走的岩石越多,正相關,遞增序列。要找最短距離的最大值...