730 機械人跳躍問題

2022-09-23 15:42:11 字數 1751 閱讀 1864

機械人正在玩乙個古老的基於 dos 的遊戲。

遊戲中有 \(n+1\) 座建築——從 \(0\) 到 \(n\) 編號,從左到右排列。

編號為 \(0\) 的建築高度為 \(0\) 個單位,編號為 \(i\) 的建築高度為 \(h(i)\) 個單位。

起初,機械人在編號為 \(0\) 的建築處。

每一步,它跳到下乙個(右邊)建築。

假設機械人在第 \(k\) 個建築,且它現在的能量值是 \(e\),下一步它將跳到第 \(k+1\) 個建築。

如果 \(h(k+1)>e\),那麼機械人就失去 \(h(k+1)−e\) 的能量值,否則它將得到 \(e−h(k+1)\) 的能量值。

遊戲目標是到達第 \(n\) 個建築,在這個過程中能量值不能為負數個單位。

現在的問題是機械人至少以多少能量值開始遊戲,才可以保證成功完成遊戲?

第一行輸入整數 \(n\)。

第二行是 \(n\) 個空格分隔的整數,\(h(1),h(2),…,h(n)\) 代表建築物的高度。

輸出乙個整數,表示所需的最少單位的初始能量值上取整後的結果。

資料範圍

\(1≤n,h(i)≤10^5,\)

輸入樣例1:

5

3 4 3 2 4

輸出樣例1:
4
輸入樣例2:
3

4 4 4

輸出樣例2:
4
輸入樣例3:
3

1 6 4

輸出樣例3:
3
數學

設初始值為 \(x\),則在第乙個建築後的能量為 \(2x-h_1\),則:\(x\geq\frac\),同理對於第二個建築:\(x\geq \frac+\frac\),則:\(x\geq \frac+\frac+\dots +\frac\)

// problem: 機械人跳躍問題

// contest: acwing

// url:

// memory limit: 64 mb

// time limit: 3000 ms

// // powered by cp editor (

// %%%skyqwq

#include //#define int long long

#define help

#define pb push_back

#define fi first

#define se second

#define mkp make_pair

using namespace std;

typedef long long ll;

typedef pairpii;

typedef pairpll;

template bool chkmax(t &x, t y)

template bool chkmin(t &x, t y)

template void inline read(t &x)

while (s <= '9' && s >= '0') x = x * 10 + (s ^ 48), s = getchar();

x *= f;

}int n;

int main()

cout

}

730 機械人跳躍問題

題解 這個題最重要的一點就是 用初始值丈量能不能行時,一定要及時停止,不然連long long都給你爆了。二分的兩個邊界 l min 1 2 r max 原因是 x x min 0 x max 0 沒意義 所以 x max ac include include include include usi...

AcWing 730 機械人跳躍問題

acwing 730.機械人跳躍問題 機械人正在玩乙個古老的基於dos的遊戲。遊戲中有n 1座建築 從0到n編號,從左到右排列。編號為0的建築高度為0個單位,編號為 i 的建築高度為h i 個單位。起初,機械人在編號為0的建築處。每一步,它跳到下乙個 右邊 建築。假設機械人在第k個建築,且它現在的能...

AcWing 730 機械人跳躍問題

原題鏈結 考察 二分 or 遞推 思路一 二分初始能量值,check函式檢查即可.要注意的是每次e都 e h,也就是 e 2 e h.2100000不管用什麼資料型別都會爆,因此必須考慮別的做法 此時思路有二 高精度,但是高精很慢,盡量避免高精 避開運算,在e一定滿足條件就return 1 可以發現...