问题描述
输入
输出
样例输入
样例输出
#include<cstdio> #include<cstring> #include<stack> #include<vector> #include<queue> #include<cmath> #include<cstdlib> #include<iostream> #include<algorithm> using namespace std; typedef unsigned long long LL; typedef double de; const LL oo = 0x3f3f3f3f; const LL maxn = 1e6+7; const LL mod = 1e9+7; char str[20]= {"23456789TJQKA"}; char str1[20] = {"CDSH"}; struct da { char s[10]; } Adam[222], You[222]; void Sort(char s1[], char s2[])///把2个字符串升序排列 { char ss[20]; int i, ai, bi; for(i = 0; i <= 12; i++) { if(s1[0] == str[i]) ai = i; if(s2[0] == str[i]) bi = i; } if(ai < bi) return ; if(ai > bi) { strcpy(ss, s1); strcpy(s1, s2); strcpy(s2, ss); return ; } for(i = 0; i < 4; i++) { if(s1[1] == str1[i]) ai = i; if(s2[1] == str1[i]) bi = i; } if(ai > bi) { strcpy(ss, s1); strcpy(s1, s2); strcpy(s2, ss); } return ; } int judge(char s1[], char s2[]) /// 返回1表示s1<s2 { int i; char a, b; int ai, bi; a = s1[0]; b = s2[0]; for(i = 0; i <= 12; i++) { if(str[i] == a) ai = i; if(str[i] == b) bi = i; } if(ai < bi) return 1; if(ai > bi) return 0; a = s1[1]; b = s2[1]; ai = bi = -1; for(i = 0; i < 4; i++) { if(str1[i] == a) ai = i; if(str1[i] == b) bi = i; } if(ai < bi) return 1; return 0; } int main() { int T, k, i, j, ans; scanf("%d", &T); while(T--) { ans = 0; scanf("%d", &k); for(i = 0; i < k; i++) scanf("%s", Adam[i].s); for(i = 0; i < k; i++) scanf("%s", You[i].s); for(i = 0; i < k-1; i++) { for(j = i+1; j < k; j++) Sort(Adam[i].s, Adam[j].s); } for(i = 0; i < k-1; i++) { for(j = i+1; j < k; j++) Sort(You[i].s, You[j].s); } i = j = 0;///排完序从头遍历一边就好 i,j分别指向2个人的第几张牌 while(i < k && j < k) { if(judge(Adam[i].s, You[j].s) == 1) { ans ++; i++; j++; } else j++; } printf("%d\n", ans); } return 0; }
原文:http://www.cnblogs.com/PersistFaith/p/4948084.html