發表於 C++CPEUVA一顆星

【CPE】UVA 105 The Skyline Problem 一顆星 by C++

105 The Skyline Problem

簡易翻譯和條件:

有一個平坦的空地要蓋很多房子,每次都會輸入一行(L, H, R) 從L蓋到R,蓋一棟高度為H的大樓
最終要輸出那塊空地的高度順序(從開始蓋到最右邊的位置)
輸入部分就是輸入最多5000組數字
每組數字都包含 L, H, R
以EOF結尾

解法其實不難~

就是最土法煉鋼的方法
利用一個固定的陣列來存數字
每次輸入就判斷一下到底新蓋的房子高度有沒有超過原本的高度
有的話就記錄下來
最後輸出時就是以【從第i個開始是places[i]】這種格式輸出!
大概就是這樣啦

老實說我再輸出的地方寫得有點複雜啦QQ
有人有更簡短的方法

if(places[i-1]!=places[i]){
    if(!first) cout<<" ";
    first=false;
    cout << i << " " << places[i];
}

 

如果有任何問題或是你有更好的寫法歡迎再下面留言討論喔!
我們下一題見啦!

程式碼:

#include 

using namespace std;

int places[10001] = {0};
int Rightest = 0;
int main()
{
    int L, H, R;
    while(cin >> L >> H >> R){
        if(R > Rightest) Rightest = R;

        for(int i=L; i<R; i++){
            if(places[i] < H) places[i] = H;
        }
    }
    bool first = true;
    for(int i=1; i<=Rightest; i++){
        if(first && places[i]!=0){
            cout << i;
            first = false;
            continue;
        }

        if(!first && places[i-1]!=places[i]){
            cout << " " << places[i-1] << " " << i;
        }
    }
    cout << " " << 0 <<endl;
    return 0;
}

UVA 105

廣告

作者:

一位 熱愛資工領域、喜歡好笑事物、偶爾打打網球 的學生 ! For A Better Me!

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.