HDU 4930 Fighting the Landlords(扯淡模拟题)

Fighting the Landlords

 

大意:

斗地主。。。。   分别给出两把手牌,肯定都合法。每张牌大小顺序是Y (i.e. colored Joker) > X (i.e. Black & White Joker) > 2 > A (Ace) > K (King) > Q (Queen) > J (Jack) > T (10) > 9 > 8 > 7 > 6 > 5 > 4 > 3。

给你8种组合:1.单牌:一张牌

        2.对子:两张相同的牌

        3.三重奏(百度翻译出来的。。):三张相同的牌

        4.三带一:三张相同的带一张牌(大小只考虑前面的牌,不考虑带的)

        5.三带二:三张相同的带两张牌,带的两张牌可以一样,也可以不一样(大小只考虑前面的牌,不考虑带的)

        6.四带二:四个相同的带两张牌,带的两张牌可以一样,也可以不一样(大小只考虑前面的牌,不考虑带的)

        7.炸弹:四个相同的一起出,不带任何东西(能管除了核弹所有的)

        8.核弹:大小王一起(能管所有的牌)

然后规则其实很简单,就是你先出,如果你出了之后,手牌没有了,输出Yes,或者你出了之后,对方没有比你出的这一把大的,也输出Yes,剩下就是输出No了。。。

 

思路:

比赛的时候一直卡1007,T到死。。。。 也没来的及管这个题。。其实不难。。

主要注意几个坑的地方就行:

1.不能四带一。

2.炸弹可以干掉四带二

3.理解好题意什么时候输出Yes

 

发这篇博客的目的不是粘代码,代码写的实在是太挫了。。。。 要看的话只看题目描述吧。。。。就是想记录一下这个题-。-  我好无聊~

 

  1 #include <stdio.h>
  2 #include <string.h>
  3 
  4 int Hash1[20], Hash2[20];
  5 int T;
  6 char s1[20], s2[20];
  7 
  8 int main()
  9 {
 10     scanf("%d", &T);
 11     while(T--){
 12         memset(Hash1, 0, sizeof(Hash1));
 13         memset(Hash2, 0, sizeof(Hash2));
 14         scanf("%s", s1);
 15         int len1 = strlen(s1);
 16         for(int i = 0; i < len1; ++i){
 17             if(s1[i] >= '3' && s1[i] <= '9'){
 18                 Hash1[s1[i]-'0']++;
 19             }
 20             else if(s1[i] == 'T'){
 21                 Hash1[10]++;
 22             }
 23             else if(s1[i] == 'J'){
 24                 Hash1[11]++;
 25             }
 26             else if(s1[i] == 'Q'){
 27                 Hash1[12]++;
 28             }
 29             else if(s1[i] == 'K'){
 30                 Hash1[13]++;
 31             }
 32             else if(s1[i] == 'A'){
 33                 Hash1[14]++;
 34             }
 35             else if(s1[i] == '2'){
 36                 Hash1[15]++;
 37             }
 38             else if(s1[i] == 'X'){
 39                 Hash1[16]++;
 40             }
 41             else if(s1[i] == 'Y'){
 42                 Hash1[17]++;
 43             }
 44         }
 45 //        for(int i = 3; i <= 17; ++i){
 46 //            printf("%d ", Hash1[i]);
 47 //        }
 48         scanf("%s", s2);
 49         int len2 = strlen(s2);
 50         for(int i = 0; i < len2; ++i){
 51             if(s2[i] >= '3' && s2[i] <= '9'){
 52                 Hash2[s2[i]-'0']++;
 53             }
 54             else if(s2[i] == 'T'){
 55                 Hash2[10]++;
 56             }
 57             else if(s2[i] == 'J'){
 58                 Hash2[11]++;
 59             }
 60             else if(s2[i] == 'Q'){
 61                 Hash2[12]++;
 62             }
 63             else if(s2[i] == 'K'){
 64                 Hash2[13]++;
 65             }
 66             else if(s2[i] == 'A'){
 67                 Hash2[14]++;
 68             }
 69             else if(s2[i] == '2'){
 70                 Hash2[15]++;
 71             }
 72             else if(s2[i] == 'X'){
 73                 Hash2[16]++;
 74             }
 75             else if(s2[i] == 'Y'){
 76                 Hash2[17]++;
 77             }
 78         }
 79 //        for(int i = 3; i <= 17; ++i){
 80 //            printf("%d ", Hash2[i]);
 81 //        }
 82         if(Hash1[16] == 1 && Hash1[17] == 1){
 83             printf("Yes\n");
 84             continue;
 85         }
 86 
 87         ///clear
 88         int cnt = 0;
 89         for(int i = 3; i <= 17; ++i){
 90             if(Hash1[i] > 0){
 91                 cnt++;
 92             }
 93         }
 94         if(cnt == 1){
 95             printf("Yes\n");
 96             continue;
 97         }
 98         else if(cnt == 2){
 99             int t1 = 0, t2 = 0;
100             for(int i = 3; i <= 17; ++i){
101                 if(Hash1[i] > 0){
102                     if(t1 == 0){
103                         t1 = i;
104                     }
105                     else {
106                         t2 = i;
107                     }
108                 }
109             }
110             if(Hash1[t1] == 3 && Hash1[t2] == 1){
111                 printf("Yes\n");
112                 continue;
113             }
114             if(Hash1[t2] == 3 && Hash1[t1] == 1){
115                 printf("Yes\n");
116                 continue;
117             }
118             if(Hash1[t1] == 3 && Hash1[t2] == 2){
119                 printf("Yes\n");
120                 continue;
121             }
122             if(Hash1[t2] == 3 && Hash1[t1] == 2){
123                 printf("Yes\n");
124                 continue;
125             }
126             if(Hash1[t1] == 4 && Hash1[t2] == 2){
127                 printf("Yes\n");
128                 continue;
129             }
130             if(Hash1[t2] == 4 && Hash1[t1] == 2){
131                 printf("Yes\n");
132                 continue;
133             }
134         }
135         else if(cnt == 3){
136             int t1 = 0, t2 = 0, t3 = 0;
137             for(int i = 3; i <= 17; ++i){
138                 if(Hash1[i] > 0){
139                     if(t1 == 0){
140                         t1 = i;
141                     }
142                     else if(t2 == 0){
143                         t2 = i;
144                     }
145                     else {
146                         t3 = i;
147                     }
148                 }
149             }
150             if(Hash1[t1] == 4 && Hash1[t2] == 1 && Hash1[t3] == 1){
151                 printf("Yes\n");
152                 continue;
153             }
154             else if(Hash1[t1] == 1 && Hash1[t2] == 4 && Hash1[t3] == 1){
155                 printf("Yes\n");
156                 continue;
157             }
158             else if(Hash1[t1] == 1 && Hash1[t2] == 1 && Hash1[t3] == 4){
159                 printf("Yes\n");
160                 continue;
161             }
162         }
163 
164 
165         if(Hash2[16] == 1 && Hash2[17] == 1){
166             printf("No\n");
167             continue;
168         }
169 
170         bool flag = false;
171         ///bomb
172         for(int i = 15; i >= 3; --i){
173             if(Hash1[i] == 4){
174                 int j;
175                 for(j = i+1; j <= 15; ++j){
176                     if(Hash2[j] == 4){
177                         break;
178                     }
179                 }
180                 if(j == 16){
181                     flag = true;
182                 }
183             }
184         }
185         if(flag){
186             printf("Yes\n");
187             continue;
188         }
189 
190         ///Four-Dual
191         for(int i = 15; i >= 3; --i){
192             if(Hash1[i] == 4 && len1 >= 6){
193                 int j;
194                 for(j = i+1; j <= 15; ++j){
195                     if(Hash2[j] == 4 && len2 >= 6){
196                         break;
197                     }
198                 }
199                 int k;
200                 for(k = 3; k <= 15; ++k){
201                     if(Hash2[k] == 4){
202                         break;
203                     }
204                 }
205                 if(j == 16 && k == 16){
206                     flag = true;
207                     //printf("Four-Dual\n");
208                 }
209             }
210         }
211         if(flag){
212             printf("Yes\n");
213             continue;
214         }
215 
216         ///Trio-Pair
217         for(int i = 15; i >= 3; --i){
218             if(Hash1[i] == 3){
219                 for(int j = 3; j <= 15; ++j){
220                     if(Hash1[j] == 2){
221                         int k;
222                         int t = 0;
223                         for(k = i+1; k <= 15; ++k){
224                             if(Hash2[k] == 3){
225                                 for(int l = 3; l <= 15; ++l){
226                                     if(Hash2[l] == 2){
227                                         t = 1;
228                                         break;
229                                     }
230                                 }
231                                 if(t == 1){
232                                     break;
233                                 }
234                             }
235                         }
236                         int p;
237                         for(p = 3; p <= 15; ++p){
238                             if(Hash2[p] == 4){
239                                 break;
240                             }
241                         }
242                         if(k == 16 && p == 16){
243                             flag = true;
244                             //printf("Trio-Pair\n");
245                         }
246                     }
247                 }
248             }
249         }
250         if(flag){
251             printf("Yes\n");
252             continue;
253         }
254 
255         ///Trio-Solo
256         for(int i = 15; i >= 3; --i){
257             if(Hash1[i] == 3 && len1 >= 4){
258                 int j;
259                 for(j = i+1; j <= 15; ++j){
260                     if(Hash2[j] == 3 && len2 >= 4){
261                         break;
262                     }
263                 }
264                 int k;
265                 for(k = 3; k <= 15; ++k){
266                     if(Hash2[k] == 4){
267                         break;
268                     }
269                 }
270                 if(j == 16 && k == 16){
271                     flag = true;
272                     //printf("Trio-Solo\n");
273                 }
274             }
275         }
276         if(flag){
277             printf("Yes\n");
278             continue;
279         }
280 
281         ///Trio
282         for(int i = 15; i >= 3; --i){
283             if(Hash1[i] == 3){
284                 int j;
285                 for(j = i+1; j <= 15; ++j){
286                     if(Hash2[j] >= 3){
287                         break;
288                     }
289                 }
290                 int k;
291                 for(k = 3; k <= 15; ++k){
292                     if(Hash2[k] == 4){
293                         break;
294                     }
295                 }
296                 if(j == 16 && k == 16){
297                     flag = true;
298                     //printf("Trio\n");
299                 }
300             }
301         }
302         if(flag){
303             printf("Yes\n");
304             continue;
305         }
306 
307         ///Pair
308         for(int i = 15; i >= 3; --i){
309             if(Hash1[i] == 2){
310                 int j;
311                 for(j = i+1; j <= 15; ++j){
312                     if(Hash2[j] >= 2){
313                         break;
314                     }
315                 }
316                 int k;
317                 for(k = 3; k <= 15; ++k){
318                     if(Hash2[k] == 4){
319                         break;
320                     }
321                 }
322                 if(j == 16 && k == 16){
323                     flag = true;
324                     //printf("Pair\n");
325                 }
326             }
327         }
328         if(flag){
329             printf("Yes\n");
330             continue;
331         }
332 
333         ///Solo
334         for(int i = 17; i >= 3; --i){
335             if(Hash1[i] == 1){
336                 int j;
337                 for(j = i+1; j <= 17; ++j){
338                     if(Hash2[j] >= 1){
339                         break;
340                     }
341                 }
342                 int k;
343                 for(k = 3; k <= 15; ++k){
344                     if(Hash2[k] == 4){
345                         break;
346                     }
347                 }
348                 if(j == 18 && k == 16){
349                     flag = true;
350                     //printf("Solo\n");
351                 }
352             }
353         }
354         if(flag){
355             printf("Yes\n");
356             continue;
357         }
358         printf("No\n");
359     }
360 
361     return 0;
362 }
HDU 4930

 

posted @ 2014-08-07 20:53  GLSilence  阅读(551)  评论(0编辑  收藏  举报