日期:2025年4月7日
ZeroJudge 題目連結:i071. 風景 (Landscape)
解題想法
從起點開始向左、向右線性搜尋各一次即可。
Python 程式碼
使用時間約為 19 ms,記憶體約為 3.4 MB,通過測試。
import sys
for line in sys.stdin:
n, m = map(int, line.split()) # n 棟建築,人在第 m 棟,編號從 1 開始
hs = list(map(int, input().split())) # 所有建築物的高度
tot = 0 # 能看到的建築物數量
m -= 1 # 建築物編號改成從 0 開始
pre = hs[m] # 前一棟最高建築物的高度,預設為自己所在的建築物高度
for i in range(m, 0, -1): # 從 m 開始向左找
if hs[i-1] > pre: # 如果左邊的建築物高度大於 pre
tot += 1 # tot 加 1
pre = hs[i-1] # 更新 pre
pre = hs[m] # 重設 pre
for i in range(m, n-1): # 從 m 開始向右找
if hs[i+1] > pre: # 如果右邊的建築物高度大於 pre
tot += 1 # tot 加 1
pre = hs[i+1] # 更新 pre
print(tot) # 印出答案
C++ 程式碼
使用時間約為 2 ms,記憶體約為 96 kB,通過測試。
#include
using namespace std;
int main() {
int n, m; // n 棟建築,人在第 m 棟,編號從 1 開始
while(scanf("%d %d", &n, &m) != EOF) {
int hs[n]; // 所有建築物的高度
for(int i=0; i0; i--) { // 從 m 開始向左找
if (hs[i-1] > pre) { // 如果左邊的建築物高度大於 pre
tot++; // tot 加 1
pre = hs[i-1]; // 更新 pre
}
}
pre = hs[m]; // 重設 pre
for(int i=m; i pre) { // 如果右邊的建築物高度大於 pre
tot++; // tot 加 1
pre = hs[i+1]; // 更新 pre
}
}
printf("%d\n", tot);
}
return 0;
}
沒有留言:
張貼留言