题解 | #打牌#

打牌

https://www.nowcoder.com/practice/82442ee76977479e8ab4b88dfadfca9f

#include <iostream>

#include <valarray>
#include <queue>
#include <cstring>
#include <stack>

using namespace std;

bool getBigger(int a, string &cards) { // 找出第一张比a大的牌
    for (unsigned int i = 0; i < cards.size(); ++i) {
        if (a < cards[i] - '0') {

            cards[i] = 0;
            return true;
        }
    }
    return false;
}

bool getBiggerNew(int a, int &get, string &cards) { // 找出第一张比a大1的牌
    for (unsigned int i = 0; i < cards.size(); ++i) {
        if (a < cards[i] - '0') {
            get = cards[i] - '0';
            cards[i] = 0;
            return true;
        }
    }
    return false;
}

void getEachNum(int fre[], string cards) {    // 计算每种牌出现的频率
    for (unsigned int i = 0; i < cards.size(); ++i) {
        fre[cards[i] - '0']++;
    }
//    for (int i = 0; i < 10; ++i) {
//        printf("fre[%d]=%d\n",i,fre[i]);
//    }
}

bool get_win(string card, string against) {
    int len = against.size();
    int fre[10]; //每种牌出现的频率
    for (int i = 0; i < 10; ++i) {
        fre[i] = 0;
    }
    getEachNum(fre, card);
    if (len == 1) {
        int now = against[0] - '0';
        if (getBigger(now, card)) {
            return true;
        }
        return false;
    } else if (len >= 2 && len <= 4) {
        for (int i = against[0] - '0'; i < 9; ++i) {
            if (fre[i + 1] >= len) {    // 找到一个牌号可以
//                now = i + 1;
                return true;
            }
        }
        return false;
    } else {
        int now = against[0] - '0';
        int get, last;
        if (!getBiggerNew(now, last, card)) {
            return false;
        }
        for (int i = 1; i < 5; ++i) {
            now = against[i] - '0';
            if (getBiggerNew(last, get, card)) {
                if (get == last + 1) {
                    last = get;
                    continue;
                }
                return false;
            }
            return true;
        }

    }
    return true;
}

int main() {
    string cards, against;
    cin >> cards >> against;
    if (get_win(cards, against)) {
        cout << "YES";
    } else {
        cout << "NO";
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务