#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
using namespace std;
char card[2][55][5];
int mmap[100][100];
bool uesd[55];
int macth[55];
int n;
bool cmp(char *a, char* b){
if (a[0] == b[0]){
int x, y;
if (a[1] == 'H')x = 4;
else if (a[1] == 'S')x = 3;
else if (a[1] == 'D')x = 2;
else x = 1;
if (b[1] == 'H')y = 4;
else if (b[1] == 'S')y = 3;
else if (b[1] == 'D')y = 2;
else y = 1;
return x > y;
}
int x, y;
if (a[0] >= '1'&&a[0] <= '9')
x = a[0] - '0';
else{
if (a[0] == 'T')x = 10;
else if (a[0] == 'J')x = 11;
else if (a[0] == 'Q')x = 12;
else if (a[0] == 'K')x = 13;
else x = 14;
}
if (b[0] >= '1'&&b[0] <= '9')
y = b[0] - '0';
else{
if (b[0] == 'T')y = 10;
else if (b[0] == 'J')y = 11;
else if (b[0] == 'Q')y = 12;
else if (b[0] == 'K')y = 13;
else y = 14;
}
return x > y;
}
bool find(int x){
for (int i = 1; i <= n; i++){
if (!uesd[i] && mmap[x][i]) {
uesd[i] = 1;
if (macth[i] == 0 || find(macth[i])) {
macth[i] = x;
return true;
}
}
}
return false;
}
int main() {
int t;
scanf("%d", &t);
while (t--){
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%s", card[0][i]);
for (int i = 1; i <= n; i++)
scanf("%s", card[1][i]);
memset(mmap, 0, sizeof(mmap));
memset(macth, 0, sizeof(macth));
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
if (cmp(card[1][i], card[0][j]))
mmap[i][j] = 1;
int ans = 0;
for (int i = 1; i <= n; i++) {
memset(uesd, 0, sizeof(uesd));
if (find(i)) ++ans;
}
cout << ans << endl;
}
return 0;
}
poj 2062
最新推荐文章于 2020-05-19 15:00:53 发布
551

被折叠的 条评论
为什么被折叠?



