題目描述
分析遇到最短距離的最大值,用二分
通過遍歷最短跳躍距離來用貪心策略計算需要挪走的岩石,來與m值比較。
直接遍歷超時,用二分法。
首先,二分的範圍:最短為岩石之間或者岩石與岸邊的最小距離;最大為整個比賽的長度。
由題意得,最短跳躍距離越大,需要挪走的岩石越多,正相關,遞增序列。
要找最短距離的最大值,就要找到最後乙個小於等於m值(要挪走的岩石數)
**
#include
typedef
long
long ll;
using
namespace std;
const
int maxn =
5e4+50;
ll c,n,m,a[maxn]
,minall = maxn,ans;
bool
check
(int t)
else
i++;}
if(flag > m)
return
true;}
intmain()
a[0]
=0; a[n+1]
= c;
ll l = minall ,r = c;
//找到最後乙個小於等於m的值。
while
(l <= r)
else
} cout<
return0;
}
P2678 跳石頭 二分
題目背景 一年一度的 跳石頭 比賽又要開始了 題目描述 這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大岩石。組委會已經選擇好了兩塊岩石作為比賽起點和終點。在起點和終點之間,有 nnn 塊岩石 不含起點和終點的岩石 在比賽過程中,選手們將從起點出發,每一步跳向相鄰的岩石,直至到達終點。為了提高...
洛谷 P2678 跳石頭 貪心 二分
題目 思路 通過二分列舉兩塊石頭間最小間距,然後驗證,記錄間距小於最小間距石頭的個數,如果石頭的個數大於m,則最小間距應該減小,反之應該增大 include include include include include include include include using namespace...
洛谷P2678 跳石頭(貪心 二分)
一年一度的 跳石頭 比賽又要開始了 這項比賽將在一條筆直的河道中進行,河道中分布著一些巨大岩石。組委會已經選擇好了兩塊岩石作為比賽起點和終點。在起點和終點之間,有 nn 塊岩石 不含起點和終點的岩石 在比賽過程中,選手們將從起點出發,每一步跳向相鄰的岩石,直至到達終點。為了提高比賽難度,組委會計畫移...