• 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.核弹:大小王一起(能管全部的牌)

    然后规则事实上非常easy,就是你先出,假设你出了之后。手牌没有了,输出Yes,或者你出了之后。对方没有比你出的这一把大的,也输出Yes,剩下就是输出No了。。


    思路:

    比赛的时候一直卡1007,T到死。

    。。。也没来的及管这个题。。事实上不难。。

    主要注意几个坑的地方即可:

    1.不能四带一。

    2.炸弹能够干掉四带二

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


    发这篇博客的目的不是粘代码。代码写的实在是太挫了。

    。。

     要看的话仅仅看题目描写叙述吧。。。

    。就是想记录一下这个题-。-  我好无聊~

    #include <stdio.h>
    #include <string.h>
    
    int Hash1[20], Hash2[20];
    int T;
    char s1[20], s2[20];
    
    int main()
    {
        scanf("%d", &T);
        while(T--){
            memset(Hash1, 0, sizeof(Hash1));
            memset(Hash2, 0, sizeof(Hash2));
            scanf("%s", s1);
            int len1 = strlen(s1);
            for(int i = 0; i < len1; ++i){
                if(s1[i] >= '3' && s1[i] <= '9'){
                    Hash1[s1[i]-'0']++;
                }
                else if(s1[i] == 'T'){
                    Hash1[10]++;
                }
                else if(s1[i] == 'J'){
                    Hash1[11]++;
                }
                else if(s1[i] == 'Q'){
                    Hash1[12]++;
                }
                else if(s1[i] == 'K'){
                    Hash1[13]++;
                }
                else if(s1[i] == 'A'){
                    Hash1[14]++;
                }
                else if(s1[i] == '2'){
                    Hash1[15]++;
                }
                else if(s1[i] == 'X'){
                    Hash1[16]++;
                }
                else if(s1[i] == 'Y'){
                    Hash1[17]++;
                }
            }
    //        for(int i = 3; i <= 17; ++i){
    //            printf("%d ", Hash1[i]);
    //        }
            scanf("%s", s2);
            int len2 = strlen(s2);
            for(int i = 0; i < len2; ++i){
                if(s2[i] >= '3' && s2[i] <= '9'){
                    Hash2[s2[i]-'0']++;
                }
                else if(s2[i] == 'T'){
                    Hash2[10]++;
                }
                else if(s2[i] == 'J'){
                    Hash2[11]++;
                }
                else if(s2[i] == 'Q'){
                    Hash2[12]++;
                }
                else if(s2[i] == 'K'){
                    Hash2[13]++;
                }
                else if(s2[i] == 'A'){
                    Hash2[14]++;
                }
                else if(s2[i] == '2'){
                    Hash2[15]++;
                }
                else if(s2[i] == 'X'){
                    Hash2[16]++;
                }
                else if(s2[i] == 'Y'){
                    Hash2[17]++;
                }
            }
    //        for(int i = 3; i <= 17; ++i){
    //            printf("%d ", Hash2[i]);
    //        }
            if(Hash1[16] == 1 && Hash1[17] == 1){
                printf("Yes
    ");
                continue;
            }
    
            ///clear
            int cnt = 0;
            for(int i = 3; i <= 17; ++i){
                if(Hash1[i] > 0){
                    cnt++;
                }
            }
            if(cnt == 1){
                printf("Yes
    ");
                continue;
            }
            else if(cnt == 2){
                int t1 = 0, t2 = 0;
                for(int i = 3; i <= 17; ++i){
                    if(Hash1[i] > 0){
                        if(t1 == 0){
                            t1 = i;
                        }
                        else {
                            t2 = i;
                        }
                    }
                }
                if(Hash1[t1] == 3 && Hash1[t2] == 1){
                    printf("Yes
    ");
                    continue;
                }
                if(Hash1[t2] == 3 && Hash1[t1] == 1){
                    printf("Yes
    ");
                    continue;
                }
                if(Hash1[t1] == 3 && Hash1[t2] == 2){
                    printf("Yes
    ");
                    continue;
                }
                if(Hash1[t2] == 3 && Hash1[t1] == 2){
                    printf("Yes
    ");
                    continue;
                }
                if(Hash1[t1] == 4 && Hash1[t2] == 2){
                    printf("Yes
    ");
                    continue;
                }
                if(Hash1[t2] == 4 && Hash1[t1] == 2){
                    printf("Yes
    ");
                    continue;
                }
            }
            else if(cnt == 3){
                int t1 = 0, t2 = 0, t3 = 0;
                for(int i = 3; i <= 17; ++i){
                    if(Hash1[i] > 0){
                        if(t1 == 0){
                            t1 = i;
                        }
                        else if(t2 == 0){
                            t2 = i;
                        }
                        else {
                            t3 = i;
                        }
                    }
                }
                if(Hash1[t1] == 4 && Hash1[t2] == 1 && Hash1[t3] == 1){
                    printf("Yes
    ");
                    continue;
                }
                else if(Hash1[t1] == 1 && Hash1[t2] == 4 && Hash1[t3] == 1){
                    printf("Yes
    ");
                    continue;
                }
                else if(Hash1[t1] == 1 && Hash1[t2] == 1 && Hash1[t3] == 4){
                    printf("Yes
    ");
                    continue;
                }
            }
    
    
            if(Hash2[16] == 1 && Hash2[17] == 1){
                printf("No
    ");
                continue;
            }
    
            bool flag = false;
            ///bomb
            for(int i = 15; i >= 3; --i){
                if(Hash1[i] == 4){
                    int j;
                    for(j = i+1; j <= 15; ++j){
                        if(Hash2[j] == 4){
                            break;
                        }
                    }
                    if(j == 16){
                        flag = true;
                    }
                }
            }
            if(flag){
                printf("Yes
    ");
                continue;
            }
    
            ///Four-Dual
            for(int i = 15; i >= 3; --i){
                if(Hash1[i] == 4 && len1 >= 6){
                    int j;
                    for(j = i+1; j <= 15; ++j){
                        if(Hash2[j] == 4 && len2 >= 6){
                            break;
                        }
                    }
                    int k;
                    for(k = 3; k <= 15; ++k){
                        if(Hash2[k] == 4){
                            break;
                        }
                    }
                    if(j == 16 && k == 16){
                        flag = true;
                        //printf("Four-Dual
    ");
                    }
                }
            }
            if(flag){
                printf("Yes
    ");
                continue;
            }
    
            ///Trio-Pair
            for(int i = 15; i >= 3; --i){
                if(Hash1[i] == 3){
                    for(int j = 3; j <= 15; ++j){
                        if(Hash1[j] == 2){
                            int k;
                            int t = 0;
                            for(k = i+1; k <= 15; ++k){
                                if(Hash2[k] == 3){
                                    for(int l = 3; l <= 15; ++l){
                                        if(Hash2[l] == 2){
                                            t = 1;
                                            break;
                                        }
                                    }
                                    if(t == 1){
                                        break;
                                    }
                                }
                            }
                            int p;
                            for(p = 3; p <= 15; ++p){
                                if(Hash2[p] == 4){
                                    break;
                                }
                            }
                            if(k == 16 && p == 16){
                                flag = true;
                                //printf("Trio-Pair
    ");
                            }
                        }
                    }
                }
            }
            if(flag){
                printf("Yes
    ");
                continue;
            }
    
            ///Trio-Solo
            for(int i = 15; i >= 3; --i){
                if(Hash1[i] == 3 && len1 >= 4){
                    int j;
                    for(j = i+1; j <= 15; ++j){
                        if(Hash2[j] == 3 && len2 >= 4){
                            break;
                        }
                    }
                    int k;
                    for(k = 3; k <= 15; ++k){
                        if(Hash2[k] == 4){
                            break;
                        }
                    }
                    if(j == 16 && k == 16){
                        flag = true;
                        //printf("Trio-Solo
    ");
                    }
                }
            }
            if(flag){
                printf("Yes
    ");
                continue;
            }
    
            ///Trio
            for(int i = 15; i >= 3; --i){
                if(Hash1[i] == 3){
                    int j;
                    for(j = i+1; j <= 15; ++j){
                        if(Hash2[j] >= 3){
                            break;
                        }
                    }
                    int k;
                    for(k = 3; k <= 15; ++k){
                        if(Hash2[k] == 4){
                            break;
                        }
                    }
                    if(j == 16 && k == 16){
                        flag = true;
                        //printf("Trio
    ");
                    }
                }
            }
            if(flag){
                printf("Yes
    ");
                continue;
            }
    
            ///Pair
            for(int i = 15; i >= 3; --i){
                if(Hash1[i] == 2){
                    int j;
                    for(j = i+1; j <= 15; ++j){
                        if(Hash2[j] >= 2){
                            break;
                        }
                    }
                    int k;
                    for(k = 3; k <= 15; ++k){
                        if(Hash2[k] == 4){
                            break;
                        }
                    }
                    if(j == 16 && k == 16){
                        flag = true;
                        //printf("Pair
    ");
                    }
                }
            }
            if(flag){
                printf("Yes
    ");
                continue;
            }
    
            ///Solo
            for(int i = 17; i >= 3; --i){
                if(Hash1[i] == 1){
                    int j;
                    for(j = i+1; j <= 17; ++j){
                        if(Hash2[j] >= 1){
                            break;
                        }
                    }
                    int k;
                    for(k = 3; k <= 15; ++k){
                        if(Hash2[k] == 4){
                            break;
                        }
                    }
                    if(j == 18 && k == 16){
                        flag = true;
                        //printf("Solo
    ");
                    }
                }
            }
            if(flag){
                printf("Yes
    ");
                continue;
            }
            printf("No
    ");
        }
    
        return 0;
    }
    


  • 相关阅读:
    angularjs事件通信$on,$emit,$broadcast详解
    es6入门7--Set Map数据结构
    ES6函数参数默认值作用域的模拟原理实现与个人的一些推测
    JS判断数组是否包含某元素
    es6入门6--数组拓展运算符,Array.from()基本用法
    js new一个对象的过程,实现一个简单的new方法
    js中的NaN,isNaN与Number.isNaN的区别,如何判断一个值严格等于NaN
    详解 JDK8 新增的日期时间类
    详解 枚举
    详解 动态代理
  • 原文地址:https://www.cnblogs.com/jhcelue/p/6811384.html
Copyright © 2020-2023  润新知