解いた問題

5/18/2012

SRM497 Div1 Easy

250

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



class PermutationSignature {
public:
  vector <int> reconstruct(string S)
  {
    vector<string> v;
    string s;

    s += S[0];
    for (int i = 1; i < (int)S.size(); ++i) {
      if (s[0] == S[i]) s += S[i];
      else {
        v.push_back(s);
        s = "";
        s += S[i];
      }
    }
    if (s.size()) v.push_back(s);

    vector <int> res;
    for (int i = 0; i <= (int)S.size(); ++i) {
      res.push_back(i + 1);
    }
    int idx = 0;
    for (int i = 0; i < (int)v.size(); ++i) {
      if (v[i][0] == 'D') {       
        reverse(res.begin() + idx, res.begin() + idx + v[i].size() + 1);
      }
      idx += v[i].size();
    }

    return res;
  }
};