The Preliminary Contest for ICPC Asia Shenyang 2019

The Preliminary Contest for ICPC Asia Shenyang 2019

Texas hold'em Poker

#include <bits/stdc++.h>

using namespace std;

const int maxn=1e6+10;
int num[1000];
int shun(){
    for (int i=15;i>=5;i--){
        if (num[i]&&num[i-1]&&num[i-2]&&num[i-3]&&num[i-4]) return i;
    }
    return -1;
}
struct node {
    int rk, num1, num2, num3;
    string na;

    bool operator<(const node a) const {
        if (rk != a.rk) return rk > a.rk;
        if (num1 != a.num1) return num1 > a.num1;
        if (num2 != a.num2) return num2 > a.num2;
        if (num3 != a.num3) return num3 > a.num3;
        return na < a.na;
    }
}b[maxn];

int n;
string na,s;
unordered_map<string,int>ma;

int main() {
    //freopen("1.txt", "r", stdin);
    ma["A"] = 1;
    ma["2"] = 2;
    ma["3"] = 3;
    ma["4"] = 4;
    ma["5"] = 5;
    ma["6"] = 6;
    ma["7"] = 7;
    ma["8"] = 8;
    ma["9"] = 9;
    ma["10"] = 10;
    ma["J"] = 11;
    ma["Q"] = 12;
    ma["K"] = 13;
    while (cin >> n) {
        for (int i = 1; i <= n; i++) {
            cin >> na >> s;
            b[i].na = na;
            string ss;
            int len = s.length();
            for (int j = 0; j <= 15; j++) num[j] = 0;
            for (int j = 0; j < len; j++) {
                ss = "";
                if (s[j] != '1') ss = s[j];
                else {
                    ss = s[j];
                    ss = ss + s[j + 1];
                    j++;
                }
                num[ma[ss]]++;
            }
            if (num[10] && num[11] && num[12] && num[13] && num[1]) {
                b[i].rk = 8;
                b[i].num1 = b[i].num2 = b[i].num3 = 0;
                continue;
            }
            int k=shun();
            if (k!=-1) {
                b[i].rk = 7;
                b[i].num1 = k;
                continue;
            }

            int f4 = 0, kk;
            for (int j = 0; j <= 15; j++) {
                if (num[j] == 4) {
                    kk = j;
                    f4 = 1;
                    break;
                }
            }
            if (f4) {
                int kkk;
                for (int j = 0; j <= 15; j++) {
                    if (num[j] == 1) {
                        kkk = j;
                        break;
                    }
                }
                b[i].rk = 6;
                b[i].num1 = kk;
                b[i].num2 = kkk;
                b[i].num3 = 0;
                continue;
            }
            int f3 = 0;
            for (int j = 0; j <= 15; j++) {
                if (num[j] == 3) {
                    kk = j;
                    f3 = 1;
                    break;
                }
            }
            if (f3) {
                int kkk, f2 = 0;
                for (int j = 0; j <= 15; j++) {
                    if (num[j] == 2) {
                        kkk = j;
                        f2 = 1;
                        break;
                    }
                }
                if (f2) {
                    b[i].rk = 5;
                    b[i].num1 = kk;
                    b[i].num2 = kkk;
                    b[i].num3 = 0;
                    continue;
                }
                int sum = 0;
                for (int j = 0; j <= 15; j++) {
                    if (num[j] == 1) {
                        sum += j;
                    }
                }
                b[i].rk = 4;
                b[i].num1 = kk;
                b[i].num2 = sum;
                b[i].num3 = 0;
                continue;
            }
            kk = 0;
            for (int j = 0; j <= 15; j++) {
                if (num[j] == 2) {
                    kk++;
                }
            }
            if (kk == 2) {
                int mx = 0, mi = 10000, kkk;
                for (int j = 0; j <= 15; j++) {
                    if (num[j] == 2) {
                        mx = max(mx, j);
                        mi = min(mi, j);
                    }
                    if (num[j] == 1) {
                        kkk = j;
                    }
                }
                b[i].rk = 3;
                b[i].num1 = mx;
                b[i].num2 = mi;
                b[i].num3 = kkk;
                continue;
            }
            if (kk == 1) {
                int kkk, sum = 0;
                for (int j = 0; j <= 15; j++) {
                    if (num[j] == 2) {
                        kkk = j;
                    } else if (num[j]) sum += j;
                }
                b[i].rk = 2;
                b[i].num1 = kkk;
                b[i].num2 = sum;
                b[i].num3 = 0;
                continue;
            }
            int sum = 0;
            for (int j = 0; j <= 15; j++) {
                if (num[j]) sum += j;
            }
            b[i].rk = 1;
            b[i].num1 = sum;
            b[i].num2 = 0;
            b[i].num3 = 0;
        }
        sort(b + 1, b + n + 1);
        for (int i = 1; i <= n; i++) {
            cout << b[i].na << endl;
        }
    }
    return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/Accpted/p/11521281.html