2018年3月9日 星期五

[C_AR201-易] 城市地圖(C++)

[C_AR201-易] 城市地圖

Time Limit: 2 seconds
問題描述 : 

你是市政府的建築師,市長給你一個任務,希望你能繪出城市的二度平面圖,以便看出城市的輪廓。市政府資料裡的每一幢建築物,都是以三維資料在儲存(Li Ri Hi),其中代表建築物的左邊起點,代表建築物的右邊起點,代表建築物的高度;你的任務是畫出城市的輪廓,繪出每一個位置的高度,當建築物重疊時,則以較高的建築物為其高度。如有三幢建築物(0,8,5), (6,8,10), (10,12,10),得到的資料為(5,5,5,5,5,5,10,10,10,0,10,10,10),以此序列得到城市的輪廓,如下參考圖:

輸入說明 :
第1個數字代表有幾組資料要測試n( 1≤n≤10 ),
接下來的數字m (1≤m≤20),代表有幾幢房子在城市裡
接著有m行資料,代表每一幢房子的資料(Li Ri Hi),其中(0≤ Li, Ri, Hi ≤50)
輸出說明 :
印出n行資料,每一行的每個數字,代表對應位置的高度;每組資料以編號零的位置開始列印高度,以最後一個高度非零的位置做結尾,每個數字並以空白隔開
範例 :

輸入範例輸出範例
2
3
0 8 5
6 8 10
10 12 10
4
1 3 9
2 5 8
6 10 5
8 10 8
5 5 5 5 5 5 10 10 10 0 10 10 10
0 9 9 9 8 8 5 5 8 8 8
  說明:
  1. 雖然題目說m不會為零,可是測資當m=0,輸出0
  2. 我沒想到建築物的高度不一定是整數,所以我把int改成double,就過了


  1. #include <iostream>  
  2. #include <string>  
  3.   
  4. using namespace std;  
  5.   
  6. int main() {  
  7.     // [C_AR201-易] 城市地圖  
  8.     int n;//測資數0  
  9.     cin >> n;  
  10.   
  11.     for(int i = 0;i < n;i++)  
  12.     {  
  13.         double array[50];  
  14.         int Max = -1;  
  15.         for(int j = 0;j < 50;j++)  
  16.         {  
  17.             array[j] = 0;  
  18.         }  
  19.           
  20.         int numBuild;  
  21.         cin >> numBuild;  
  22.         if(numBuild != 0)  
  23.         {  
  24.             for(int j = 0;j < numBuild;j++)  
  25.             {  
  26.                 double L, R, H;//左邊,右邊,高度  
  27.                 cin >> L >> R >> H;  
  28.                 if(R > Max)  
  29.                 {  
  30.                     Max = R;      
  31.                 }  
  32.                 for(int k = L;k <= R;k++)  
  33.                 {  
  34.                     if(array[k] < H)  
  35.                     {  
  36.                         array[k] = H;  
  37.                     }  
  38.                 }  
  39.             }  
  40.             bool zero = true;  
  41.             int ans[50];  
  42.             int count = 0;  
  43.               
  44.             for(int j = Max;j >= 0;j--)  
  45.             {  
  46.                 if(zero == true && array[j] == 0)  
  47.                 {  
  48.                       
  49.                 }  
  50.                 else  
  51.                 {  
  52.                     ans[j] = array[j];  
  53.                     zero = false;  
  54.                     count++;  
  55.                 }  
  56.             }  
  57.               
  58.             for(int j = 0;j < count;j++)  
  59.             {  
  60.                   
  61.                 if(j == 0)  
  62.                     cout << array[j];  
  63.                 else  
  64.                     cout << " " << array[j];  
  65.             }  
  66.             cout << endl;  
  67.         }  
  68.         else  
  69.         {  
  70.             cout << "0" << endl;  
  71.         }  
  72.     }  
  73.     return 0;  
  74. }  

1 則留言:

  1. 陣列應該要開51
    LR距離是從0計算到50個
    有51個元素

    回覆刪除