PKU 2493 Rdeaalbe

http://poj.org/problem?id=2493
人間は英単語の最初と最後の文字以外の順番が適当でもある程度単語が認識できる。
この条件のもとで辞書と文が与えられた時、入力が何通りに読むことが出来るか答えろというような問題。

単語の最初と最後以外をソートして数えて単語ごとにかけていく。
問題のタイトルが最初なんだこれと思いましたが、問題分をみてReadableかなとか思いました

void solve(){
  int n,m;
  cin>>n;
  map<string,int> app;
  rep(i,n){
    string a;
    cin>>a;
    if(SZ(a)>2)
      sort(a.begin()+1,a.end()-1);
    ++app[a];
  }
  cin>>m;
  cin.get();
  rep(i,m){
    string str;
    getline(cin,str);
    stringstream ss(str);
    ll ans=1;
    while(ss>>str){
      if(SZ(str)>2)
        sort(str.begin()+1,str.end()-1);
      ans*=app[str];
    }
    cout<<ans<<endl;
  }
  cout<<endl;
}

main(){
  int t;
  cin>>t;
  rep(sc,t){
    printf("Scenario #%d:\n",sc+1);
    solve();
  }
}