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

2021-10-24 00:26:51 字數 912 閱讀 3338

題目描述

分析遇到最短距離的最大值,用二分

通過遍歷最短跳躍距離來用貪心策略計算需要挪走的岩石,來與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 塊岩石 不含起點和終點的岩石 在比賽過程中,選手們將從起點出發,每一步跳向相鄰的岩石,直至到達終點。為了提高比賽難度,組委會計畫移...