麻将WA求助
查看原帖
麻将WA求助
222039
wangzl楼主2022/5/25 14:02

rt.

#include <bits/stdc++.h>
#define CARD 15
#define KIND 40
using namespace std;
int /*cards[CARD], */add[KIND];
string ics;
inline int change(string c) {
    if(c == "1W") return 1;
    if(c == "2W") return 2;
    if(c == "3W") return 3;
    if(c == "4W") return 4;
    if(c == "5W") return 5;
    if(c == "6W") return 6;
    if(c == "7W") return 7;
    if(c == "8W") return 8;
    if(c == "9W") return 9;
    if(c == "1S") return 10;
    if(c == "2S") return 11;
    if(c == "3S") return 12;
    if(c == "4S") return 13;
    if(c == "5S") return 14;
    if(c == "6S") return 15;
    if(c == "7S") return 16;
    if(c == "8S") return 17;
    if(c == "9S") return 18;
    if(c == "1T") return 19;
    if(c == "2T") return 20;
    if(c == "3T") return 21;
    if(c == "4T") return 22;
    if(c == "5T") return 23;
    if(c == "6T") return 24;
    if(c == "7T") return 25;
    if(c == "8T") return 26;
    if(c == "9T") return 27;
    if(c == "DONG") return 28;
    if(c == "NAN") return 29;
    if(c == "XI") return 30;
    if(c == "BEI") return 31;
    if(c == "ZHONG") return 32;
    if(c == "FA") return 33;
    if(c == "BAI") return 34;
}
string rechange(int c) {
    if(c == 1) return "1W";
    if(c == 2) return "2W";
    if(c == 3) return "3W";
    if(c == 4) return "4W";
    if(c == 5) return "5W";
    if(c == 6) return "6W";
    if(c == 7) return "7W";
    if(c == 8) return "8W";
    if(c == 9) return "9W";
    if(c == 10) return "1S";
    if(c == 11) return "2S";
    if(c == 12) return "3S";
    if(c == 13) return "4S";
    if(c == 14) return "5S";
    if(c == 15) return "6S";
    if(c == 16) return "7S";
    if(c == 17) return "8S";
    if(c == 18) return "9S";
    if(c == 19) return "1T";
    if(c == 20) return "2T";
    if(c == 21) return "3T";
    if(c == 22) return "4T";
    if(c == 23) return "5T";
    if(c == 24) return "6T";
    if(c == 25) return "7T";
    if(c == 26) return "8T";
    if(c == 27) return "9T";
    if(c == 28) return "DONG";
    if(c == 29) return "NAN";
    if(c == 30) return "XI";
    if(c == 31) return "BEI";
    if(c == 32) return "ZHONG";
    if(c == 33) return "FA";
    if(c == 34) return "BAI";
}
bool check(int dep) {
    if(dep == 4) return true;
    for(int i = 1; i <= 34; ++i) {
        if(add[i] >= 3) {
            add[i] -= 3;
            if(check(dep + 1)) {add[i] += 3; return true;}
            add[i] += 3;
        }
    }
    for(int i = 1; i <= 27; ++i) {
        if((i - 1) % 9 < 7 && add[i] > 0 && add[i + 1] > 0 && add[i + 2] > 0) {
            add[i] -= 1, add[i + 1] -= 1, add[i + 2] -= 1;
            if(check(dep + 1)) {add[i] += 1, add[i + 1] += 1, add[i + 2] += 1; return true;}
            add[i] += 1, add[i + 1] += 1, add[i + 2] += 1;
        }
    }
    return false;
}
bool hu(int c) {
    ++add[c];
    for (int i = 1; i <= 34; ++i) {
        if(add[i] > 4) return false;
        if(add[i] >= 2) {
            add[i] -= 2;
            if(check(0)) {--add[c], add[i] += 2; return true;}
            add[i] += 2;
        }
    }
    --add[c];
    return false;
}
int main() {
    int idx = 0;
    while(cin >> ics && ics != "0") {
        bool ready = false;
        ++idx;
        memset(add, 0, sizeof(add));
        ++add[change(ics)];
        for (int i = 2; i <= 13; ++i) 
            cin >> ics, 
            ++add[change(ics)];
        printf("Case %d:", idx);
        for(int i = 1; i <= 34; ++i) {
            if(hu(i)) {
                ready = true;
                cout << " " << rechange(i);
            }
        }
        if(!ready) printf(" Not ready");
        puts("");
    }
    return 0;
}
2022/5/25 14:02
加载中...