小明今天跑到家中頂樓看風景。他家所在道路上的建築連成一線,他往一個方向看去的話,只能看到比他家還高且沒有被前方建築遮住的房子。
例如路上由左至右的建築高度分別為 5, 3, 4, 2, 4。
若小明家是由左數來第二個建築,則他在頂樓往左邊看去可以看到第一棟建築,往右邊看只
能看見第三棟建築,第四棟和第五棟都會因為高度限制被前面建築遮住。
給定所有建築的高度及小明家的位置,請撰寫一個程式計算小明總共可以
看到的建築數量。
輸入第一列有兩個整數 N 和 M (2 ≤ N ≤ 1000,1 ≤ M ≤ 1000) 分別表示建
築數量以及小明家的位置。第二列有 N 個整數 Xi (0 ≤ Xi ≤1000,1 ≤ i ≤ N) 表示
建築物的高度。
輸出一個整數表示小明能夠觀看到的建築物數量。
#include <iostream>
#include <vector>
using namespace std;
int main() {
int N = 0, M = 0, tmp = 0, total = 0, tg = M;
vector<int> v_building(1,-1);
cin >> N >> M;
for (int i = 0; i < N; i++) {
cin >> tmp;
v_building.push_back(tmp);
}
v_building.push_back(-1);
int size = v_building.size();
tg = v_building[M];
for (int i = M+1; i < size; i++) {
if (v_building[i] > tg) {
total++;
tg = v_building[i];
}
}
tg = v_building[M];
for (int i = M-1 ; i >= 0; i--) {
if (v_building[i] > tg) {
total++;
tg = v_building[i];
}
}
cout << total;
return 0;
}
APCS
C++