解いた問題

5/22/2012

SRM405 Div2 Medium

500

やるだけ



vector<string> f(string s)
{
  replace(s.begin(), s.end(), '/', ' ');
  istringstream iss(s);
  vector<string> v;
  for (string t; iss >> t; v.push_back(t)) ;
  return v;
}

class RelativePath {
public:
  string makeRelative(string path, string curr)
  {
    vector<string> v = f(path);
    vector<string> u = f(curr);

    int pre = 0;
    for (int i = 0; i < (int)min(u.size(), v.size()); ++i) {
      if (u[i] != v[i]) break;
      pre = i + 1;
    }

    string ret;
    for (int i = pre; i < (int)u.size(); ++i) {
      ret += "../";
    }
    for (int i = pre; i < (int)v.size(); ++i) {    
      ret += v[i] + "/";
    }
    ret.erase(ret.begin() + ret.size() - 1);
    return ret;
  }
};