i071: 風景

題目:

小明今天跑到家中頂樓看風景。他家所在道路上的建築連成一線,他往一個方向看去的話,只能看到比他家還高且沒有被前方建築遮住的房子。
例如路上由左至右的建築高度分別為 5, 3, 4, 2, 4。
若小明家是由左數來第二個建築,則他在頂樓往左邊看去可以看到第一棟建築,往右邊看只
能看見第三棟建築,第四棟和第五棟都會因為高度限制被前面建築遮住。
給定所有建築的高度及小明家的位置,請撰寫一個程式計算小明總共可以
看到的建築數量。

測資說明:

輸入第一列有兩個整數 N 和 M (2 ≤ N ≤ 1000,1 ≤ M ≤ 1000) 分別表示建
築數量以及小明家的位置。第二列有 N 個整數 Xi (0 ≤ Xi ≤1000,1 ≤ i ≤ N) 表示
建築物的高度。

輸出一個整數表示小明能夠觀看到的建築物數量。

C++ Code:

#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; }

tags: APCS C++