解いた問題

5/18/2012

SRM497 Div1 Easy

250

Dの範囲をリバースする。



  1. class PermutationSignature {  
  2. public:  
  3.   vector <int> reconstruct(string S)  
  4.   {  
  5.     vector<string> v;  
  6.     string s;  
  7.   
  8.     s += S[0];  
  9.     for (int i = 1; i < (int)S.size(); ++i) {  
  10.       if (s[0] == S[i]) s += S[i];  
  11.       else {  
  12.         v.push_back(s);  
  13.         s = "";  
  14.         s += S[i];  
  15.       }  
  16.     }  
  17.     if (s.size()) v.push_back(s);  
  18.   
  19.     vector <int> res;  
  20.     for (int i = 0; i <= (int)S.size(); ++i) {  
  21.       res.push_back(i + 1);  
  22.     }  
  23.     int idx = 0;  
  24.     for (int i = 0; i < (int)v.size(); ++i) {  
  25.       if (v[i][0] == 'D') {         
  26.         reverse(res.begin() + idx, res.begin() + idx + v[i].size() + 1);  
  27.       }  
  28.       idx += v[i].size();  
  29.     }  
  30.   
  31.     return res;  
  32.   }  
  33. };