#34481: 基礎解法.簡單篇


yp11151119@yphs.tp.edu.tw (802-32張鈞晏)

學校 : 臺北市私立延平高級中學
編號 : 197210
來源 : [203.72.178.1]
最後登入時間 :
2023-12-01 15:16:02
i071. 風景 (Landscape) -- TOI練習賽202204新手組第3題 | From: [203.72.178.1] | 發表日期 : 2023-03-23 17:33

/*i071風景 (Landscape)

問題敘述
小明今天跑到家中頂樓看風景。他家所在道路上的建築連成一線,他往一
個方向看去的話,只能看到比他家還高且沒有被前方建築遮住的房子。

比如,路上由左至右的建築高度分別為 5, 3, 4, 2, 4。若小明家是由
左數來第二個建築,則他在頂樓往左邊看去可以看到第一棟建築,往右邊看只
能看見第三棟建築,第四棟和第五棟都會因為高度限制被前面建築遮住。
給定所有建築的高度及小明家的位置,請撰寫一個程式計算小明總共可以
看到的建築數量。
輸入格式
輸入第一列有兩個整數 N 和 M (2 <= N <= 1000,1 <= M <= 1000) 分別表示建
築數量以及小明家的位置。第二列有 N 個整數 Xi (0 <= Xi <= 1000,1 <= i <= N) 表示
建築物的高度。
輸出格式
輸出一個整數表示小明能夠觀看到的建築物數量。
輸入範例 1
5 1
1 2 3 4 5

輸出範例 1
4

輸入範例 2
7 4
7 2 3 2 5 4 3

輸出範例 2
3

輸入範例 3
6 5
3 1 4 8 9 1

輸出範例 3
0

評分說明
此題目測資分成兩組,每組測資有多筆測試資料,需答對該組所有測試
資料才能獲得該組分數,各組詳細限制如下。
第一組(20 分):N = 3。
第二組(80 分):無特別限制。*/
#include<bits/stdc++.h>
using namespace std;
int main(){
    int n/*建築數量*/,m/*小明家的位置*/,xi[1001]={}/*建築物的高度*/,sum/*小明能夠觀看到的建築物數量*/,tallest/*目前高度*/;
    while(cin>>n>>m){
        sum=0;//初始值 
        for(int i=1;i<=n;i++){//n次 
            cin>>xi[i];//第i棟建築物的高度
        }
        tallest=xi[m];//小明家的位置為基準,左看 
        for(int j=m+1;j<=n;j++){
            if(xi[j]>tallest) {tallest=xi[j] , sum++;}//","一起執行 
        }
        tallest=xi[m];//小明家的位置為基準,右看 
        for(int k=m-1;k>=1;k--){
            if(xi[k]>tallest) {tallest=xi[k] , sum++;}//","一起執行 
        }
        cout<<sum<<endl;
    }
    return 0;
}

 
#34482: Re: 基礎解法.簡單篇


yp11151119@yphs.tp.edu.tw (802-32張鈞晏)

學校 : 臺北市私立延平高級中學
編號 : 197210
來源 : [203.72.178.1]
最後登入時間 :
2023-12-01 15:16:02
i071. 風景 (Landscape) -- TOI練習賽202204新手組第3題 | From: [203.72.178.1] | 發表日期 : 2023-03-23 17:37



 
ZeroJudge Forum