ICPCアジア瀋陽2019年のための予備コンテスト

ICPCアジア瀋陽2019年のための予備コンテスト

テキサスホールデムポーカー

#include <ビット/ STDC ++ H> 

名前空間STDを使用して、

const int型MAXN = 1E6 + 10。
int型NUM [1000]; 
INTの排除(){ 
    ためには、(INT I 15 =; I> = 5; I - ){ 
        IF(NUM [I] && NUM [I-1] && NUM [I-2] && NUM [I-3] && NUM [1- 4])は、iを返します。
    } 
    -1を返します。
} 
構造体ノード{ 
    int型RK、NUM1、NUM2、NUM3。
    文字列NA; 

    ブール演算子<(CONSTノードA)のconst { 
        IF(RK = a.rk!)戻りRK> a.rk。
        もし(NUM1 = a.num1!)戻りNUM1> a.num1。
        もし(!からnum2 = a.num2)リターンからnum2> a.num2。
        (もし!NUM3 = a.num3)戻りNUM3> a.num3。
        a.na <ナ返します。
    } 
} [MAXN】b。

文字列s、NA; 
            (; J <= 15、J ++のint J = 0)NUM [J] = 0;
unordered_map <文字列、整数>ミリアンペア。

メインINT(){ 
    //freopen("1.txt」、 "R"、STDIN)。
    MA [ "A"] = 1。
    MA [ "2"] = 2; 
    MA [ "3"] = 3; 
    MA [ "4"] = 4。
    MA [ "10"] = 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。
    (CIN >> N){しばらく
        {ため(; iは<= N I ++はint型I = 1)
            CIN >> S NA。
            B [i]は.na = NA。
            文字列SS。
            INT LEN = s.length()。
            {(J ++; J <LEN INT J = 0)のための
                SS = "";
                もし(!S [J] = '1')のSS = S [J]。
                他{ 
                    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]は.nu​​m1 = bの[I] .nu​​m2 = bの[I] .nu​​m3 = 0。
                持続する; 
            } 
            int型K =俊()。
            IF(!K = - 1){ 
                B [i]は.rk = 7。
                B [i]は.nu​​m1 = K。
                持続する;
            } 

            INT F4 = 0、KK。 
            (INT J = 0であり、j <= 15; J ++)用{ 
                IF(NUM [J] == 4){ 
                    KK = J。
                    F4 = 1。
                    ブレーク; 
                } 
            } 
            もし(F4){ 
                int型KKK。
                (INT J = 0であり、j <= 15; J ++)用{ 
                    IF(NUM [J] == 1){ 
                        KKK = J。
                        ブレーク; 
                    } 
                } 
                、B [i]は.rk = 6。
                B [i]は.nu​​m1 = KK。
                B [i]は.nu​​m2 = KKK。
                B [i]は.nu​​m3 = 0。
                持続する;
            } 
            int型F3 = 0。
            (INT J = 0であり、j <= 15; J ++)用{ 
                IF(NUM [J] == 3){ 
                    KK = J。
                    F3 = 1。
                    ブレーク; 
                } 
            } 
            もし(F3){ 
                int型KKK、F2 = 0。
                (INT J = 0であり、j <= 15; J ++)用{ 
                    IF(NUM [J] == 2){ 
                        KKK = J。
                        F2 = 1; 
                        ブレーク; 
                    } 
                }  
                {(F2)場合
                    、B [i]は.rk = 5。
                    B [i]は.nu​​m1 = KK。
                    B [i]は.nu​​m2 = KKK。
                    B [i]は.nu​​m3 = 0。
                    持続する; 
                } 
                int型の和= 0。
                (INT J = 0であり、j <= 15; J ++)用{ 
                    IF(NUM [J] == 1){ 
                        合計+ = J。
                    } 
                } 
                、B [i]は.rk = 4。
                B [i]は.nu​​m1 = KK。
                B [i]は.nu​​m2 =和。
                B [i]は.nu​​m3 = 0。
                持続する; 
            } 
            KK = 0。
            用(int型J = 0であり、j <= 15; J ++){
                IF(NUM [J] == 2){ 
                    株式会社++。
                } 
            } 
            (KK == 2){もし
                INT MX = 0、MI = 10000、KKK。
                (INT J = 0であり、j <= 15; J ++)用{ 
                    IF(NUM [J] == 2){ 
                        MX = MAX(MX、J)。
                        MI =分(MI、J)。
                    } 
                    IF(NUM [J] == 1){ 
                        KKK = J。
                    } 
                } 
                、B [i]は.rk = 3。
                B [i]は.nu​​m1 = MX。
                B [i]は.nu​​m2 = MI。
                B [i]は.nu​​m3 = KKK。
                持続する; 
            }
            IF(KK == 1){ 
                int型KKK、和= 0。
                (INT J = 0であり、j <= 15; J ++)用{ 
                    IF(NUM [J] == 2){ 
                        KKK = J。
                    }そうであれば(NUM [J])の合計+ = J。
                } 
                B [i]は.rk = 2。
                B [i]は.nu​​m1 = KKK。
                B [i]は.nu​​m2 =和。
                B [i]は.nu​​m3 = 0。
                持続する; 
            } 
            int型の和= 0。
            (INT J = 0であり、j <= 15; J ++)用{ 
                IF(NUM [J])の合計+ = J。
            } 
            B [i]は.rk = 1。
            B [i]は.nu​​m1 =和。
        } 
        ソート(B + 1、B + N + 1)。
            B [i]は.nu​​m2 = 0。
            B [i]は.nu​​m3 = 0。
        以下のために(INT i = 1; iが<= N; iは++){ 
            COUT << B [i]は.na << ENDL。
        } 
    } 
    0を返します。
}

  

おすすめ

転載: www.cnblogs.com/Accpted/p/11521281.html