有乙個小球掉落在一串連續的彈簧板上,小球落到某乙個彈簧板後,會被彈到某乙個地點,直到小球被彈到彈簧板以外的地方。
假設有 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。輸出乙個整數,代表小球最多經過多少次才能彈出彈簧板。
樣例輸入
52 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。行號由上至...