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; } }