Hatena::Grouptopcoder

naoya_t@topcoder RSSフィード

2008-12-25

SRM405 Div1 Easy: RelativePath

| 18:04 | SRM405 Div1 Easy: RelativePath - naoya_t@topcoder を含むブックマーク はてなブックマーク - SRM405 Div1 Easy: RelativePath - naoya_t@topcoder SRM405 Div1 Easy: RelativePath - naoya_t@topcoder のブックマークコメント

カレントパスをもとに絶対パスから相対パスを求める問題。

class RelativePath {
public:
  string makeRelative(string path, string currentDir) {
    vector<string> vp = split(path,'/'), vcd = split(currentDir,'/');
    int lp=sz(vp), lcd=sz(vcd);
    int common=0;
    if(currentDir=="/") { lcd=1; common=0;}
    else
      for(int i=1;i<min(lp,lcd);i++){
        if(vp[i]!=vcd[i]) break;
        common++;
      }
    string dest=""; rep(i,lcd-1-common) dest+="../";
    for(int i=1+common;i<lp;i++) {dest+=vp[i];if(i<lp-1)dest+="/";}
    return dest;
  }
};