例題 P-3-6. 砍樹 (APCS202001)


Submit solution

分數: 100 (partial)
時間限制: 1.0s
記憶體限制: 1G

作者:
題目類型
允許的語言
Assembly, Brainfuck, C, C++, Python

\(N\) 棵樹種在一排,現階段砍樹必須符合以下的條件:「讓它向左或向右倒下,倒下時不會超過林場的左右範圍之外,也不會壓到其它尚未砍除的樹木。」
你的工作就是計算能砍除的樹木。若 \(c[i]\) 代表第 \(i\) 棵樹的位置座標,\(h[i]\) 代表高度。向左倒下壓到的範圍為 \([c[i]-h[i],c[i]]\) ,而向右倒下壓到的範圍為 \([c[i],c[i]+h[i]]\) 。如果倒下的範圍內有其它尚未砍除的樹就稱為壓到,剛好在端點不算壓到。
我們可以不斷找到滿足砍除條件的樹木,將它砍倒後移除,然後再去找下一棵可以砍除的樹木,直到沒有樹木可以砍為止。無論砍樹的順序為何,最後能砍除的樹木是相同的。

輸入格式

第一行為正整數 \(N\) 以及一個正整數 \(L\),代表樹的數量與右邊界的座標; 第二行有 \(N\) 個正整數代表這 \(N\) 棵樹的座標,座標是從小到大排序的; 第三行有 \(N\) 個正整數代表樹的高度。 同一行數字之間以空白間隔,\(N \leq 10^5\),\(L\) 與樹高都不超過 \(10^9\)。

輸出格式

第一行輸出能被砍除之樹木數量, 第二行輸出能被砍除之樹木中最高的高度。

範例輸入

6 140
10 30 50 70 100 125
30 15 55 10 55 25

範例輸出

4
30

評論

目前沒有評論。