• 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
    ");
     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
    ");
     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
    ");
    112                 continue;
    113             }
    114             if(Hash1[t2] == 3 && Hash1[t1] == 1){
    115                 printf("Yes
    ");
    116                 continue;
    117             }
    118             if(Hash1[t1] == 3 && Hash1[t2] == 2){
    119                 printf("Yes
    ");
    120                 continue;
    121             }
    122             if(Hash1[t2] == 3 && Hash1[t1] == 2){
    123                 printf("Yes
    ");
    124                 continue;
    125             }
    126             if(Hash1[t1] == 4 && Hash1[t2] == 2){
    127                 printf("Yes
    ");
    128                 continue;
    129             }
    130             if(Hash1[t2] == 4 && Hash1[t1] == 2){
    131                 printf("Yes
    ");
    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
    ");
    152                 continue;
    153             }
    154             else if(Hash1[t1] == 1 && Hash1[t2] == 4 && Hash1[t3] == 1){
    155                 printf("Yes
    ");
    156                 continue;
    157             }
    158             else if(Hash1[t1] == 1 && Hash1[t2] == 1 && Hash1[t3] == 4){
    159                 printf("Yes
    ");
    160                 continue;
    161             }
    162         }
    163 
    164 
    165         if(Hash2[16] == 1 && Hash2[17] == 1){
    166             printf("No
    ");
    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
    ");
    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
    ");
    208                 }
    209             }
    210         }
    211         if(flag){
    212             printf("Yes
    ");
    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
    ");
    245                         }
    246                     }
    247                 }
    248             }
    249         }
    250         if(flag){
    251             printf("Yes
    ");
    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
    ");
    273                 }
    274             }
    275         }
    276         if(flag){
    277             printf("Yes
    ");
    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
    ");
    299                 }
    300             }
    301         }
    302         if(flag){
    303             printf("Yes
    ");
    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
    ");
    325                 }
    326             }
    327         }
    328         if(flag){
    329             printf("Yes
    ");
    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
    ");
    351                 }
    352             }
    353         }
    354         if(flag){
    355             printf("Yes
    ");
    356             continue;
    357         }
    358         printf("No
    ");
    359     }
    360 
    361     return 0;
    362 }
    HDU 4930
  • 相关阅读:
    第01组 Beta冲刺(5/5)
    第01组 Beta冲刺(4/5)
    第01组 Beta冲刺(3/5)
    第01组 Beta冲刺(2/5)
    第01组 Beta冲刺(1/5)
    2019 SDN上机第6次作业
    SDN课程阅读作业(2)
    2019 SDN上机第5次作业
    第01组 Alpha事后诸葛亮
    第01组 Alpha冲刺(6/6)
  • 原文地址:https://www.cnblogs.com/Silence-AC/p/3898049.html
Copyright © 2020-2023  润新知