計蒜客 彈簧板

2021-08-17 08:32:43 字數 1353 閱讀 1050

有乙個小球掉落在一串連續的彈簧板上,小球落到某乙個彈簧板後,會被彈到某乙個地點,直到小球被彈到彈簧板以外的地方。

假設有 n

n 個連續的彈簧板,每個彈簧板佔乙個單位距離,a[i]a[

i]代表代表第 i

i 個彈簧板會把小球向前彈 a[i]a[

i]個距離。比如位置 1

1 的彈簧能讓小球前進 2

2 個距離到達位置 3

3。如果小球落到某個彈簧板後,經過一系列彈跳會被彈出彈簧板,那麼小球就能從這個彈簧板彈出來。現在希望你計算出小球從任意乙個彈簧板落下,最多會被彈多少次後,才會彈出彈簧板。

第乙個行輸入乙個 n

n 代表一共有 n

n 個彈簧板。第二行輸入 n

n 個數字,中間用空格分開。第 i

i 個數字 a[i]a[

i]代表第 i

i 個彈簧板可以讓小球移動的距離。

資料約定:

對於 50% 的資料:1 \le n \le 1000, 0 < a[i] \leq 301≤

n≤10

00,0

i]≤3

0。對於 100% 的資料:1 \le n \le 100000, 0 < a[i] \leq 301≤

n≤10

0000

,0i]≤3

0。輸出乙個整數,代表小球最多經過多少次才能彈出彈簧板。

樣例輸入

5

2 2 3 1 2

樣例輸出

3

這道題1  建立了乙個鄰接表,存每個位置的多個父親位置,

2 將能一次跳出的位置存下來,遍歷這些位置,尋這些位置的父親,最後比較找出最多的點

#includeusing namespace std;

int f[100005]=;

vectora[100005];

int res=0;

void find(int s,int sum)

else

} int sum=0;

for(int i=0;i但我著個解法寫麻煩了;之後看了一篇部落格,發現可以直接這麼寫,我思維還是固定了

#include

#include

using

namespace

std;

int a[100001] = ;

int d[100001] = ;

int main()

int max_v = 1;

for(int i=n; i >= 1; --i)}}

cout

<< max_v << endl;

return

0;}

彈簧板(加強) 計蒜客

目錄 題目 題解 有乙個小球掉落在一串連續的彈簧板上,小球落到某乙個彈簧板後,會被彈到某乙個地點,直到小球被彈到彈簧板以外的地方。假設有n 個連續的彈簧板,每個彈簧板佔乙個單位距離,a i 代表代表第 i 個彈簧板會把小球向前彈a i 個距離。比如位置 1的彈簧能讓小球前進 2個距離到達位置 3。如...

計蒜客 公告板

問題描述 蒜廠有乙個 h w 的矩形公告板,其中 h 是高度,w 是寬度。現在有若干張 1 wi 的公告,wi 是寬度,公告只能橫著放,即高度為 1 的邊垂直於水平面,且不能互相有重疊,每張公告都要求盡可能的放在最上面的合法的位置上。若可以放置,輸出每塊可放置的位置的行號 若不存在,輸出 1。行號由...

計蒜客習題 公告板

問題 蒜廠有乙個 h w 的矩形公告板,其中 h 是高度,w 是寬度。現在有若干張 1 wi 的公告,wi 是寬度,公告只能橫著放,即高度為 1 的邊垂直於水平面,且不能互相有重疊,每張公告都要求盡可能的放在最上面的合法的位置上。若可以放置,輸出每塊可放置的位置的行號 若不存在,輸出 1。行號由上至...