zoukankan      html  css  js  c++  java
  • 2014 多校联合训练赛6 Fighting the Landlords

    本场比赛的三个水题之一,题意是两个玩家每人都持有一手牌,问第一个玩家是否有一种出牌方法使得在第一回和对方无牌可出。直接模拟即可,注意一次出完的情况,一开始没主意,wa了一发。

    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    char s[3][30];
    int player[4][30];
    int hashCard(char ch){
        if(ch >= '3' && ch <= '9') return ch-'0'-3;
        if(ch == 'T') return 7;
        if(ch == 'J') return 8;
        if(ch == 'Q') return 9;
        if(ch == 'K') return 10;
        if(ch == 'A') return 11;
        if(ch == '2') return 12;
        if(ch == 'X') return 13;
        if(ch == 'Y') return 14;
    }
    void init(int idx){
        int len = strlen(s[idx]);
        memset(player[idx],0,sizeof player[idx]);
        for(int i = 0;i < len;i ++) player[idx][hashCard(s[idx][i])] ++;
    }
    int cntNum(int idx,int num){
        int ret = 0;
        for(int i = 0;i < 20 ;i ++)
            if(player[idx][i] == num) ret++;
        return ret;
    }
    bool isHaveCnt(int idx,int cnt){
        for(int i = 0;i < 20;i ++)
            if(player[idx][i] == cnt) return true;
        return false;
    }
    bool checkOneToFour(int cnt){
        bool ret = false;
        for(int i = 20;i >= 0;i --){
            int flag = 0;
            if(player[1][i] < cnt) continue;
            for(int j = 20;j >= 0;j --){
                if(player[2][j] < cnt) continue;
                if(j > i){
                    flag = 1;
                    break;
                }
            }
            if(flag == 1) break;
            ret = true;
            break;
        }
        if(cntNum(1,cnt) &&ret == true && !isHaveCnt(2,4)) return true;
        return false;
    }
    bool isWin(){
        if(player[1][13] && player[1][14]) return true;
        if(player[2][13] && player[2][14]) return false;
        for(int i = 1;i <= 4;i ++)
            if(checkOneToFour(i)) return true;
        if(!isHaveCnt(1,4) && isHaveCnt(2,4)) return false;
        int len1 = strlen(s[1]);
        int len2 = strlen(s[2]);
        if(len1 <= len2) return false;
        if(isHaveCnt(1,3)){
            if(len2 == 3) return true;
            if((isHaveCnt(1,2) || cntNum(1,3) >1) && !isHaveCnt(2,2) && cntNum(2,3) < 2) return true;
        }else if(isHaveCnt(1,4)){
            if(len1 == 6) return true;
            else return false;
        }
        return false;
    }
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            scanf("%s%s",s[1],s[2]);
            init(1),init(2);
            int flag(0);
            int len = strlen(s[1]);
            if(len <= 6){
                if(len == 1) printf("Yes
    "),flag = 1;
                if(len == 2){
                    if(cntNum(1,2)) printf("Yes
    "),flag = 1;
                }else if(len == 3){
                    if(cntNum(1,3)) printf("Yes
    "),flag = 1;
                }else if((isHaveCnt(1,4) && len != 5) || (isHaveCnt(1,3) && len != 5)) printf("Yes
    "),flag = 1;
                else if(len == 5){
                    if(cntNum(1,2) == 1 && cntNum(1,3) == 1) printf("Yes
    "),flag = 1;
                }
            }
            if(flag) continue;
            if(isWin()) printf("Yes
    ");
            else printf("No
    ");
        }
        return 0;
    }


  • 相关阅读:
    【Python学习】URL编码解码&if __name__ == '__main__'
    【Python学习】邮件发送
    【Python学习】网络编程
    【Python学习】接口开发
    【Python学习】操作Sqllite
    【Python学习】操作Mongodb
    【Python学习】操作Redis
    【Python学习】操作Mysql
    jzoj6003
    jzoj5995
  • 原文地址:https://www.cnblogs.com/anhuizhiye/p/3933127.html
Copyright © 2011-2022 走看看