1. 程式人生 > >PAT 乙級 1045

PAT 乙級 1045

namespace 個數 stream amp -s 滿足 數字 元素 col

題目

題目地址:PAT 乙級 1045

題解

本題的解法比較巧妙,剛開始的試著用暴力求解,果不其然時間超限……

變換思路,既然對於每個元素來說滿足的條件是前小後大,那麽對數組排序,對應的位置相等的即為題設要求的“可能主元”,但是還有一個條件要保證當前是從左向右遍歷的最大值;總結一下兩個條件:1. 排序後對應位置數字相等;2. 當前操作元素是從左向右遍歷中的最大值

同時還要註意,當輸入n值為0時,除了需要輸出“可能主元”的個數之外,還需要保留換行符‘\n’

代碼

 1 #include <iostream>
 2 #include <algorithm>
 3
#include <vector> 4 using namespace std; 5 6 int main() { 7 vector<int> num; 8 vector<int> sortnum; 9 vector<int> result; 10 int n = 0; 11 cin >> n; 12 while (n--) { 13 int tmp = 0; 14 cin >> tmp; 15 num.push_back(tmp);
16 sortnum.push_back(tmp); 17 } 18 sort(sortnum.begin(), sortnum.end()); 19 int maxx = 0; 20 for (int i = 0; i < num.size(); i++) { 21 if (num[i] > maxx) 22 maxx = num[i]; 23 if (num[i] == sortnum[i] && num[i] >= maxx) 24 result.push_back(sortnum[i]);
25 } 26 cout << result.size() << endl; 27 for (int i = 0; i < result.size(); i++) { 28 if (i != result.size() - 1) 29 cout << result[i] << ; 30 else 31 cout << result[i]; 32 } 33 cout << endl; 34 35 return 0; 36 }

PAT 乙級 1045