PKU 1629 Fillword

http://poj.org/problem?id=1629
n*mのマス目にアルファベットが書かれている。これにP個の単語を見つけ出すとき、残っている文字を出力しろというような問題。

使われる文字は1度しか使われず、P個の単語は全て使われるので、出現する文字列を全て数えて、単語のぶんだけ引けばいい。
最初探索で通ってしまうのかと思いましたが、この方法にすぐ気づけて良かったです。

main(){
  map<char,int>app;
  int h,w,t;
  cin>>h>>w>>t;
  string in;
  rep(i,h){
    cin>>in;
    rep(j,w)app[in[j]]++;
  }
  rep(i,t){
    cin>>in;
    rep(j,SZ(in))app[in[j]]--;
  }
  FOR(iter,app){
    rep(i,iter->S)cout<<iter->F;
  }
  cout<<endl;
}