PKU 1760 Disk Tree

http://poj.org/problem?id=1760
パース系。

思うようにフォルダ構造をデータ化するのにかなり手間取りました。
でも、こういうけいの問題は好きです。

map<string,set<string> > file;

void insert(const string&in,int pos){
  int spos=in.find("\\",pos);
  file[in.substr(0,pos)].insert(in.substr(pos,spos-pos));
  if(spos+1<SZ(in))insert(in,spos+1);
}

void print(const string&in,int n){
  FOR(siter,file[in]){
    rep(i,n)cout<<' ';
    cout<<*siter<<endl;
    print(in+*siter+"\\",n+1);
  }
}

main(){
  int n;
  cin>>n;
  rep(i,n){
    string in;
    cin>>in;
    insert("\\"+in+"\\",1);
  }
  print("\\",0);
}