2017年12月20日 星期三

[C_AR187-易] 工作集中的記憶體使用量(C++)

[C_AR187-易] 工作集中的記憶體使用量

Time Limit: 1 seconds
問題描述 :
記憶體使用量 是一種 串流資料的形態。例如: 880 640 879 980 1024 2840 ,前述的串流資料代表著:
  •  單位時間 1 的記憶體消耗為 880 單位
  •  單位時間 2 的記憶體消耗為 640 單位
  •  單位時間 3 的記憶體消耗為 879 單位
  •  …
  •  依此類推
工作集( working set )是一種資料結構可以收集一個時間區間中的記憶體使用量「最大值」,做為系統效能的統計。
在設定工作集時,系統設計者會設定所要觀測的時間區間 長度 ,其為一個 「 整數 」 ,接著系統就會算出這段時間區間長度中的記憶體最大值,以前例而言,假設時間區間為「 個時間單位」 ,那麼每個工作集的最大值如下:
  •  工作集 1 : [880 640 879 980] 1024 2840 ,最大值 980
  •  工作集 2 : 880 [640 879 980 1024] 2840 ,最大值 1024
  •  工作集 3 : 880 640 [879 980 1024 2840] ,最大值 2840
  •  工作集 4 : 880 640 879 [980 1024 2840] ,最大值 2840
請注意,工作集中一定要包含給定的時間單位資料。舉例而言,我們規定這個例子中工作集要包含 4 個時間單位的資料,那麼資料值少於 4 的工作集,都不是合法工作集,所以我們就不需要理會這些工作集的資料。 上述工作集 4 中只有 3 筆資料,不符合 4 筆資料,所以工作集 4 是不合法的工作集,我們不需要理會它。
輸入說明 :
輸入有兩行。
第 1 行是工作集的時間單位長度,其為一個正整數N (1≤N≤100)。
第 2 行是一個記憶體使用量的串流,其為一個字串,包含M (1≤M≤150)個正整數(1~110,000),每個正整數用空白隔開。
輸出說明 :
計算每個工作集中的記憶體最大量。每一個工作集的結果輸出成一行。最後一個結果輸出後,請加一個換行。
範例 :

輸入範例輸出範例
4
880 640 879 980 1024 2840
980
1024
2840

  1. #include <iostream>    
  2. #include <string>    
  3. #include <sstream>    
  4.     
  5. using namespace std;    
  6.     
  7. int main() {    
  8.     // [C_AR187-易] 工作集中的記憶體使用量    
  9.     // g++(c++11)    
  10.     string n;//工作集的時間單位長度    
  11.     getline(cin, n);  
  12.     if(n != "0")    
  13.     {    
  14.         string works;    
  15.         getline(cin, works);    
  16.         int M[1500];    
  17.         fill(M, M+1500, 0);    
  18.         int len = 0;    
  19.         //字串切割    
  20.         stringstream ss(works);    
  21.         string token;    
  22.         while (getline(ss, token, ' '))    
  23.         {    
  24.             M[len] = stoi(token);    
  25.             len++;    
  26.         }    
  27.         int max = -1;    
  28.         int j = 0;    
  29.         int i = 0;    
  30.         int N = stoi(n);  
  31.         while(j+N <= len)    
  32.         {    
  33.             for(int i = j;i < j+N;i++)    
  34.             {    
  35.                 if(max < M[i])    
  36.                 {    
  37.                         max = M[i];    
  38.                 }    
  39.             }    
  40.             cout << max << endl;    
  41.             max = 0;  
  42.             j++;    
  43.         }    
  44.      }    
  45.      return 0;    
  46. }  

沒有留言:

張貼留言