PKU 2062 Card Game Cheater

http://poj.org/problem?id=2062
adamとeveがトランプで対戦する。
最初にk枚のカードを順番に出していき、強いカードをだしたほうが1点得る。
カードの強さは、
・1>K>Q>J>10>9>8>・・・・>2
もし数字が同じであれば、
・ハート>スペード>ダイア>クラブ>
ここでeveはadamの出すカードが分かっているとする。
最適な戦略を取ったときにeveが取れる点数の最大値はいくつかを求めるというような問題。

カードの強さを数値化して、相手が自分の最強より強いカードを持っていれば、最弱のカードで負け、そうでなければ最強のカードで相手の最強のカードに勝てばよい。

int in[2][26];

main(){
  int n;
  cin>>n;
  map<char,int> top;
  top['H']=3;
  top['S']=2;
  top['D']=1;
  map<char,int> ex;
  ex['T']=10;
  ex['J']=11;
  ex['Q']=12;
  ex['K']=13;
  ex['A']=14;
  while(n--){
    int k;
    cin>>k;
    deque<int> q[2];    
    rep(i,2){
      rep(j,k){
        string str;
        cin>>str;
        if(isdigit(str[0]))in[i][j]=(str[0]-'2')*4+top[str[1]];
        else in[i][j]=ex[str[0]]*4+top[str[1]];
      }
      sort(in[i],in[i]+k);
      rep(j,k)q[i].pb(in[i][j]);
    }

    int ans=0;
    rep(i,k){
      if(q[1].front()>q[0].front()){
        ++ans;
        q[1].pop_front();
        q[0].pop_front();
      }else q[1].pop_front();q[0].pop_back();
    }
    cout<<ans<<endl;
  }
}