1 条题解

  • 0
    @ 2024-12-24 9:54:30

    C++ :

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<iostream>
    using namespace std;
    int sum[15];
    int n;
    int res=0;
    void one()
    {
        for(int i=1;i<=13;i++)
        {
            if(sum[i]>=1)
            {
                res++;
            }
        }
    }
    void dui()
    {
        for(int i=1;i<=13;i++)
        {
            if(sum[i]>=2)
            {
                res++;
            }
        }
    }
    void three()
    {
        for(int i=1;i<=13;i++)
        {
            if(sum[i]>=3)
            {
                sum[i]-=3;
                res++;
                for(int j=1;j<=13;j++)
                {
                    if(sum[j]>=2) res++;
                    if(sum[j]>=1) res++;
                }
                sum[i]+=3;
            }
        }
    }
    void sz()
    {
        int res1=1;
        for(int i=1;i<=8;i++)
        {
            if(sum[i]>=1)
            {
                if(res1==1)
                {
                    res1=1;
                    for(int j=i+1;j<=12;j++)
                    {
                        if(sum[j]>=1)
                        {
                            res1++;
                        }
                        else break;
                    }
                }
                else res1--;
                if(res1>=5)
                {
                    for(int j=4;j<res1;j++)
                    {
                        res++;
                    }
                }
            }
        }
    }
    void ld()
    {
        int res1=1;
        for(int i=1;i<=10;i++)
        {
            if(sum[i]>=2)
            {
                if(res1==1)
                {
                    res1=1;
                    for(int j=i+1;j<=12;j++)
                    {
                        if(sum[j]>=2)  res1++;
                        else break;
                    }
                }
                else res1--;
                if(res1>=3)
                {
                    for(int j=2;j<res1;j++)
                    {
                        res++;
                    }
                }
            }
        }
    }
    void fjone(int s,int temp)
    {
        if(s==0)
        {
            res++;
            return ;
        }
        for(int i=temp;i<=13;i++)
        {
            if(sum[i]>=1)
            {
                sum[i]--;
                fjone(s-1,i);
                sum[i]++;
            }
        }
    }
    void fjtwo(int s,int temp)
    {
        if(s==0)
        {
            res++;
            return ;
        }
        for(int i=temp;i<=13;i++)
        {
            if(sum[i]>=2)
            {
                sum[i]-=2;
                fjtwo(s-1,i);
                sum[i]+=2;
            }
        }
    }
    void fj()
    {
        int res1=1;
        for(int i=1;i<=11;i++)
        {
            if(sum[i]>=3)
            {
                if(res1==1)
                {
                    res1=1;
                    for(int j=i+1;j<=12;j++)
                    {
                        if(sum[j]>=3)  res1++;
                        else break;
                    }
                }
                else res1--;
                if(res1>=2)
                {
                    sum[i]-=3;
                    for(int j=1;j<res1;j++)
                    {
                        sum[i+j]-=3;
                        res++;
                        fjone(j+1,1);
                        fjtwo(j+1,1);
                    }
                    for(int j=i;j<i+res1;j++) sum[j]+=3;
                }
            }
        }
    }
    void zd()
    {
        for(int i=1;i<=13;i++)
        {
            if(sum[i]==4)
            {
                sum[i]-=4;
                res++;
                fjtwo(2,1);
                sum[i]+=4;
            }
        }
    }
    void solve()
    {
        dui();
        three();
        one();
        sz();
        ld();
        fj();
        zd();
    }
    char s[105];
    int main()
    {
        //freopen("input.txt","r",stdin);
        //freopen("output.txt","w",stdout);
        int t;
        scanf("%d",&t);
        while(t--)
        {
            memset(sum,0,sizeof(sum));
            scanf("%s",s);
            int len=strlen(s);
            for(int i=0;i<len;i++)
            {
                if(s[i]>='3'&&s[i]<='9')
                    sum[s[i]-'3'+1]++;
                else if(s[i]=='2')
                    sum[13]++;
                else if(s[i]=='A')
                    sum[12]++;
                else if(s[i]=='K')
                    sum[11]++;
                else if(s[i]=='Q')
                    sum[10]++;
                else if(s[i]=='J')
                    sum[9]++;
                else if(s[i]=='T')
                    sum[8]++;
            }
            res=0;
            solve();
            printf("%d\n",res);
        }
    }
    
    
    • 1

    信息

    ID
    1131
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者