#include <iostream> #include <cstring> using namespace std; int card_to_int(char c) { switch (c) { case '3': return 13; case '4': return 14; case '5': return 15; case '6': return 16; case '7': return 17; case '8': return 18; case '9': return 19; case 'T': return 20; case 'J': return 21; case 'Q': return 22; case 'K': return 23; case 'A': return 24; case '2': return 25; case 'X': return 26; case 'Y': return 27; default: return -1; } } bool cmp(int a[], int b[], int n, int m) { if (n == 0) { return true; } else if (m == 0) { return false; } // 单张牌 if (n == 1 && m == 1) { return a[0] > b[0]; } // 对子 if (n == 2 && m == 2) { if (a[0] == a[1] && b[0] == b[1]) { return a[0] > b[0]; } else { return a[1] > b[1]; } } // 三张牌 if (n == 3 && m == 3) { if (a[0] == a[1] && a[1] == a[2] && b[0] == b[1] && b[1] == b[2]) { return a[0] > b[0]; } else { return a[2] > b[2]; } } // 炸弹 if (n == 4 && m == 4) { if (a[0] == a[1] && a[1] == a[2] && a[2] == a[3] && b[0] == b[1] && b[1] == b[2] && b[2] == b[3]) { return a[0] > b[0]; } else { return a[3] > b[3]; } } // 其他情况,无法比较 return false; } int main() { int t; cin >> t; while (t--) { char a[20], b[20]; cin >> a >> b; int n = strlen(a); int m = strlen(b); int cards_a[10], cards_b[10]; memset(cards_a, 0, sizeof(cards_a)); memset(cards_b, 0, sizeof(cards_b)); // 统计JLH的手牌中每种牌的出现次数 for (int i = 0; i < n; i += 2) { int card = card_to_int(a[i]); cards_a[card - 3]++; } // 统计下家的手牌中每种牌的出现次数 for (int i = 0; i < m; i += 2) { int card = card_to_int(b[i]); cards_b[card - 3]++; } bool flag = false; for (int i = 4; i <= 27; i++) { if (cmp(cards_a, cards_b, i, i)) { flag = true; break; } } if (flag) { cout << "Yes" << endl; } else { cout << "No" << endl; } } return 0; } |
Double click to view unformatted code.