标签:
Description:
Input:
Output:
Sample Output:
#include<stdio.h> #include<string.h> #include<queue> #include<math.h> #include<stdlib.h> #include<algorithm> using namespace std; const int N=1e6+10; const int INF=0x3f3f3f3f; const int MOD=1e9+7; typedef long long LL; char str1[20]={"23456789TJQKA"}; ///在这两个str字符串中下标较小的元素也是较小的,这样便于比较 char str2[20]={"CDSH"}; char s1[50][50], s2[50][50]; void Sort(char a[], char b[]) ///判断a是否>b,如果是则交换 { int ida1, ida2, idb1, idb2, i; char ch[50]; for (i = 0; i < 13; i++) { if (str1[i] == a[0]) ida1 = i; ///ida1代表a[0]在str1中的位置 if (str1[i] == b[0]) idb1 = i; ///idb1代表b[0]在str1中的位置 } for (i = 0; i < 4; i++) { if (str2[i] == a[1]) ida2 = i; ///ida2代表a[1]在str2中的位置 if (str2[i] == b[1]) idb2 = i; ///idb2代表b[1]在str2中的位置 } if (ida1 > idb1) ///下标大,对应的元素就大 { strcpy(ch, a); strcpy(a, b); strcpy(b, ch); } else if (ida1 == idb1) { if (ida2 > idb2) { strcpy(ch, a); strcpy(a, b); strcpy(b, ch); } } } int Judge(char a[], char b[]) ///判断b是否>a { int ida1, ida2, idb1, idb2, i; for (i = 0; i < 13; i++) { if (str1[i] == a[0]) ida1 = i; if (str1[i] == b[0]) idb1 = i; } for (i = 0; i < 4; i++) { if (str2[i] == a[1]) ida2 = i; if (str2[i] == b[1]) idb2 = i; } if (ida1 < idb1) return 1; if (ida1 == idb1 && ida2 < idb2) return 1; return 0; } int main () { int T, n, i, j, ans; scanf("%d", &T); while (T--) { ans = 0; scanf("%d", &n); for (i = 0; i < n; i++) scanf("%s", s1[i]); for (i = 0; i < n; i++) scanf("%s", s2[i]); for (i = 0; i < n-1; i++) { for (j = i+1; j < n; j++) { Sort(s1[i], s1[j]); ///由于牌的排序比较麻烦,所以我们可以采用冒泡排序,每次比较两个牌的大小 Sort(s2[i], s2[j]); } } i = j = 0; while (i < n && j < n) ///任意一方无法找到合适的牌出,就结束 { if (Judge(s1[i], s2[j])) ///如果在s2中找到比s1[i]大的牌,分数+1,双方都能出一张牌i++,j++ { i++; j++; ans++; } else j++; ///由于两个数组都是排过序的,所以s2[j]当这张牌不能大于s1[i]时,我们需要j++,继续在s2中查找,那么试想当Adam出了一张牌,而我们不能在s2中找到比它大的牌,那么这种查找就可以结束了,因为Adam剩下的牌会更大 } printf("%d\n", ans); } return 0; }
HDU 1528 Card Game Cheater(打扑克)
标签:
原文地址:http://www.cnblogs.com/syhandll/p/4950809.html