首页 题目

题目大意

D.png

解题思路

模拟,就看写的细不细。

解题代码

#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
char Poker[13]={'2','3','4','5','6','7','8','9','O','J','Q','K','A'};
char Flower[4]={'D','C','H','S'};
int Flower_I[30],Poker_I[30],Poker_J[30];
struct Pok{
    int num,flower;
}a[5],b[5];
bool cmp(Pok a,Pok b)
{
    if (a.num==b.num)
    {
        return a.flower>b.flower;
    }
    else return a.num>b.num; 
}
int Query(string P)
{
    int num=0,flow=0,cnt=0;
    for (int i=0;i<P.length();i++)
    {
        while (P[i]!=Flower[1]&&P[i]!=Flower[2]&&P[i]!=Flower[0]&&P[i]!=Flower[3]) i++;
        cnt++;
        a[cnt].flower=Flower_I[P[i]-'A'];
        i+=2;
        char c=P[i];
        if (P[i]=='1'&&P[i+1]=='0') c='O',i++;
        if (c<='9'&&c>='0') num=Poker_J[c-'0'];
        if (c<='Z'&&c>='A') num=Poker_I[c-'A'];
        a[cnt].num=num;
        if (cnt==3) break;
    }
    sort(a+1,a+4,cmp);
    if (a[1].num==a[2].num&&a[1].num==a[3].num)
    {
        return 6;
    }
    if (a[1].flower==a[2].flower&&a[2].flower==a[3].flower)
    {    
        if (a[1].num-1==a[2].num&&a[2].num-1==a[3].num) 
        {
            return 5;
        }
        else 
            if (a[1].num==12&&a[2].num==1&&a[3].num==0) return 5;
            else return 4;
    }
    if (a[1].num-1==a[2].num&&a[2].num-1==a[3].num)    return 3;    
    else if (a[1].num==12&&a[2].num==1&&a[3].num==0) return 3;
    
    if (a[1].num==a[2].num||a[1].num==a[3].num||a[2].num==a[3].num) return 2;
    
    if (a[1].num==3&&a[2].num==1&&a[3].num==0)
    {
        if (a[1].flower!=a[2].flower||a[2].flower!=a[3].flower||a[1].flower!=a[3].flower) return 0;
    }
    
    return 1;
}

bool PD(int X,int Y)//X,a huang, Y,b zhang; 1 huang 0 zhang;
{
    if (X==0||Y==0)
    {
        if (X==0&&Y==6) return 1;
        if (X==6&&Y==0) return 0;
        if (X==0) X=1;
        if (Y==0) Y=1;
    }
    if (X!=0&&Y!=0)
    {
        if (X>Y) return 1;
        if (Y>X) return 0;
        if (X==Y)
        {
            if (X==5||X==3)
            {
                if ((a[1].num==12&&a[2].num==1)&&!(b[1].num==12&&b[2].num==1)) return 0;
                if (!(a[1].num==12&&a[2].num==1)&&(b[1].num==12&&b[2].num==1)) return 1;
                if ((a[1].num==12&&a[2].num==1)&&(b[1].num==12&&b[2].num==1)) return a[2].flower>b[2].flower;
            }
            if (X==2)
            {
                int u,v;int o,p;
                for (int i=1;i<=2;i++) 
                {
                    if (a[i].num==a[i+1].num) u=a[i].num;
                    if (b[i].num==b[i+1].num) v=b[i].num;
                }
                for (int i=1;i<=2;i++) 
                {
                    if (a[i].num!=u) o=a[i].num;
                    if (b[i].num!=v) p=b[i].num;
                }
                if (u==v)
                {
                    if (o==p)
                    {
                        if (a[2].flower==3) return 1;
                        if (b[2].flower==3) return 0;
                    }
                    else return o>p;
                }
                else return u>v;
            }
            for (int i=1;i<=3;i++)
            {
                if (a[i].num==b[i].num) 1;
                else return a[i].num>b[i].num;
            }
            for (int i=1;i<=3;i++)
            {
                if (a[i].flower>b[i].flower)return 1;
                if (a[i].flower<b[i].flower)return 0;
            }
        }
    }
}
int main()
{
    int T;
    for (int i=0;i<=3;i++) Flower_I[Flower[i]-'A']=i; 
    for (int i=8;i<=12;i++) Poker_I[Poker[i]-'A']=i; 
    for (int i=0;i<=7;i++) Poker_J[Poker[i]-'0']=i; 
    scanf("%d",&T);
    while (T--)
    {    
        string S,zhang,huang;
        zhang.clear();huang.clear();
        cin>>S;int M=0;
        for (int i=0;i<S.length();i++)
        {
            if (S[i]==':') {M=i;continue;}
            if (!M) zhang+=S[i];
            else huang+=S[i];
        }
        int Y=Query(zhang);
        for (int i=1;i<=3;i++) b[i].num=a[i].num,b[i].flower=a[i].flower;
        int X=Query(huang);
        if (PD(X,Y)) puts("huang_sir");
        else puts("zhang_sir");
    }
    return 0;
}



文章评论

    ZigZagK 访客ChromeWindows
    2021-06-7 9:22   回复

    gayman竟然大括号换行

目录