http://acm.hdu.edu.cn/showproblem.php?pid=1528
View Code
1 #include <stdio.h> 2 #include <string.h> 3 4 const int N=30; 5 int a[N],e[N],n; 6 int mat[N]; 7 bool vis[N]; 8 int val(char *c) 9 { 10 int s=0; 11 if('2'<=c[0] && c[0]<='9') s=c[0]-'0'; 12 else switch(c[0]) 13 { 14 case 'T': s=10; break; 15 case 'J': s=11; break; 16 case 'Q': s=12; break; 17 case 'K': s=13; break; 18 case 'A': s=14; break; 19 } 20 s*=4; 21 switch(c[1]) 22 { 23 case 'C': s+=0; break; 24 case 'D': s+=1; break; 25 case 'S': s+=2; break; 26 case 'H': s+=3; break; 27 } 28 return s; 29 } 30 bool find(int u) 31 { 32 for(int v=0;v<n;v++) 33 if(e[u]>a[v] && !vis[v]) 34 { 35 vis[v]=1; 36 if(mat[v]==-1 || find(mat[v])) 37 { 38 mat[v]=u; 39 return 1; 40 } 41 } 42 return 0; 43 } 44 int maxmatch() 45 { 46 int cnt=0; 47 memset(mat,-1,sizeof(mat)); 48 for(int i=0;i<n;i++) 49 { 50 memset(vis,0,sizeof(vis)); 51 if(find(i)) cnt++; 52 } 53 return cnt; 54 } 55 int main() 56 { 57 int T; 58 scanf("%d",&T); 59 while(T--) 60 { 61 scanf("%d",&n); 62 for(int i=0;i<n;i++) 63 { 64 char c[5]; 65 scanf("%s",c); 66 a[i]=val(c); 67 } 68 for(int i=0;i<n;i++) 69 { 70 char c[5]; 71 scanf("%s",c); 72 e[i]=val(c); 73 } 74 int ans=maxmatch(); 75 printf("%d\n",ans); 76 } 77 return 0; 78 }