hdu 1528-Card Game Cheater(贪心算法)

题意不讲,怕说不清,自己一点点看吧。

思路是贪心,将每个人的牌按从小到大或(从大到小),我是从小到大排的,

然后每次从第二摞排中找比第一摞排的那张大且相差最小的就可以了,每次找到就sum++;

最后sum值就是最优的(贪心思想)。

  1 #include<stdio.h>
  2 #include<algorithm>
  3 #include<iostream>
  4 #include<stdlib.h>
  5 #include<string.h>
  6 #include<math.h>
  7 int f(const void*p,const void*q);
  8 typedef struct pp
  9 {
 10     int x;
 11     int y;
 12 } ss;
 13 int main(void)
 14 {
 15     int n,i,j,k,p,q;
 16     char a[100];
 17     char b[100];
 18     ss kk[100];
 19     ss qq[100];
 20     scanf("%d",&k);
 21     while(k--)
 22     {
 23         scanf("%d ",&n);
 24         gets(a);
 25         gets(b);
 26         int uu=0;
 27         for(i=0; a[i]!='\0'; i++)
 28         {
 29             if(i%3==0)
 30             {
 31                 if(a[i]=='T')
 32                 {
 33                     kk[uu].x=10;
 34 
 35                 }
 36                 else  if(a[i]=='J')
 37                 {
 38                     kk[uu].x=11;
 39                 }
 40                 else  if(a[i]=='Q')
 41                 {
 42                     kk[uu].x=12;
 43                 }
 44                 else  if(a[i]=='K')
 45                 {
 46                     kk[uu].x=13;
 47                 }
 48                 else if(a[i]=='A')
 49                 {
 50                     kk[uu].x=14;
 51                 }
 52                 else kk[uu].x=a[i]-'0';
 53 
 54             }
 55           if((i-1)%3==0&&a[i]!='S')
 56             {
 57                 kk[uu].y=a[i]-'A';
 58                 uu++;
 59             }
 60             if((i-1)%3==0&&a[i]=='S')
 61             {
 62                  kk[uu].y=6;
 63                 uu++;
 64             }
 65 
 66         }
 67         uu=0;
 68         for(i=0; b[i]!='\0'; i++)
 69         {
 70             if(i%3==0)
 71             {
 72                 if(b[i]=='T')
 73                 {
 74                     qq[uu].x=10;
 75 
 76                 }
 77                 else  if(b[i]=='J')
 78                 {
 79                     qq[uu].x=11;
 80                 }
 81                 else  if(b[i]=='Q')
 82                 {
 83                     qq[uu].x=12;
 84                 }
 85                 else  if(b[i]=='K')
 86                 {
 87                     qq[uu].x=13;
 88                 }
 89                 else if(b[i]=='A')
 90                 {
 91                     qq[uu].x=14;
 92                 }
 93                 else qq[uu].x=b[i]-'0';
 94 
 95             }
 96             if((i-1)%3==0&&b[i]!='S')
 97             {
 98                 qq[uu].y=b[i]-'A';
 99                 uu++;
100             }
101             if((i-1)%3==0&&b[i]=='S')
102             {
103                  qq[uu].y=6;
104                 uu++;
105             }
106         }
107         qsort(qq,n,sizeof(ss),f);
108         qsort(kk,n,sizeof(ss),f);
109         int x,y;
110         x=0;
111         int s=0;
112         for(j=0; j<n; j++)
113         {
114             for(p=x; p<n; p++)
115             {
116                 if(qq[p].x>kk[j].x)
117                 {
118                     x=p+1;
119                     s++;
120                     break;
121                 }
122                 else if(qq[p].x==kk[j].x)
123                 {
124                     if(qq[p].y>kk[j].y)
125                     {
126                         x=p+1;
127                         s++;
128                         break;
129                     }
130                 }
131             }
132         }
133         printf("%d\n",s);
134 
135     }
136     return 0;
137 
138 }
139 int f(const void*p,const void*q)
140 {
141     ss*w=(ss*)p;
142     ss*ww=(ss*)q;
143     if(w->x==ww->x)//如果前面的大小相同,就按后面的从小到大排
144     {
145         return w->y-ww->y;
146     }
147     else return w->x-ww->x;
148 }

 

posted @ 2015-11-08 20:44  sCjTyC  阅读(401)  评论(0编辑  收藏  举报