PKU 1119 Start Up the Startup

http://poj.org/problem?id=1119
サーチエンジン的なものの検索の重みをつけろというような問題。

termはスペースだけで区切られているみたいです。
他にもいろいろやりましたが、なかなか手ごわい問題でした。

string in;

bool end(const string&in){
  if(SZ(in)<10 || in.substr(0,10)!=string(10,'-'))return false;
  for(int i=10;i<SZ(in);++i){
    if(in[i]!=' ')return false;
  }
  return true;
}

main(){
  map<string,int>se;
  string in;
  string conv;
  while(getline(cin,in)){
    if(end(in))break;
    rep(i,SZ(in)){
      if(isdigit(in[i]) || in[i]==' ')conv+=in[i];
      if(isalpha(in[i]))conv+=tolower(in[i]);
    }
  }
  stringstream ss(conv);
  string key;
  while(ss>>key){
    se[key]++;
  }
  while(getline(cin,in)){
    if(end(in))break;
    conv="";
    map<string,int>app;
    rep(i,SZ(in)){
      if(isdigit(in[i]) || in[i]==' ')conv+=in[i];
      if(isalpha(in[i]))conv+=tolower(in[i]);
    }

    while(getline(cin,in)){
      if(end(in))break;
      rep(i,SZ(in)){
        if(isdigit(in[i]) || in[i]==' ')conv+=in[i];
        if(isalpha(in[i]))conv+=tolower(in[i]);
      }
    }
    stringstream ss(conv);
    string key;
    while(ss>>key){
      if(se.count(key))app[key]++;
    }    
    double ans=0;
    FOR(iter,app)ans+=sqrt(iter->S*se[iter->F]);
    printf("%.2f\n",ans);
  }
}