P11227 [CSP-J 2024] 扑克牌 题解

· · 题解

观前提示:此种代码在竞赛中耗费时间较长,不建议尝试,但我还是用这个拿到分的,因为别的都不会啊

P11227 [CSP-J 2024] 扑克牌 Solution

Step 1:审题

每张牌具有两个属性:花色和点数。花色共有 4 种:方片、草花、红桃和黑桃。点数共有 13 种,从小到大分别为 \tt{A 2 3 4 5 6 7 8 9 T J Q K}注意:点数 10 在本题中记为 \tt T

注意:点数 10 在本题中记为 \tt T(二次强调)。

所以,我们不能方便地使用下标来判断,寻找新的方式。

Step 2:构思

但是我非要叛逆 其实是这个蒟蒻不会别的了,有没有什么办法呢,有!

首先,我们维护一个二维数组,y 坐标代表花色,x 坐标表示点数,我们可以得到这样的一个二维数组:

Step 3:形成代码

首先,我们需要录入每一张牌,并且告诉数组:这牌有了,注意:这里我用的是bool类型的二维数组,这样就不用去重了。

    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        char hua,num;
        cin>>hua>>num;
        //判断红桃
        if(hua=='H'){
            if(num=='A'){
                p[1][1]=1;
            }
            if(num=='2'){
                p[1][2]=1;
            }
            if(num=='3'){
                p[1][3]=1;
            }
            if(num=='4'){
                p[1][4]=1;
            }
            if(num=='5'){
                p[1][5]=1;
            }
            if(num=='6'){
                p[1][6]=1;
            }
            if(num=='7'){
                p[1][7]=1;
            }
            if(num=='8'){
                p[1][8]=1;
            }
            if(num=='9'){
                p[1][9]=1;
            }
            if(num=='T'){
                p[1][10]=1;
            }
            if(num=='J'){
                p[1][11]=1;
            }
            if(num=='Q'){
                p[1][12]=1;
            }
            if(num=='K'){
                p[1][13]=1;
            }
        }
        //判断黑桃
        if(hua=='S'){
            if(num=='A'){
                p[2][1]=1;
            }
            if(num=='2'){
                p[2][2]=1;
            }
            if(num=='3'){
                p[2][3]=1;
            }
            if(num=='4'){
                p[2][4]=1;
            }
            if(num=='5'){
                p[2][5]=1;
            }
            if(num=='6'){
                p[2][6]=1;
            }
            if(num=='7'){
                p[2][7]=1;
            }
            if(num=='8'){
                p[2][8]=1;
            }
            if(num=='9'){
                p[2][9]=1;
            }
            if(num=='T'){
                p[2][10]=1;
            }
            if(num=='J'){
                p[2][11]=1;
            }
            if(num=='Q'){
                p[2][12]=1;
            }
            if(num=='K'){
                p[2][13]=1;
            }
        }
        //判断方片
        if(hua=='D'){
            if(num=='A'){
                p[3][1]=1;
            }
            if(num=='2'){
                p[3][2]=1;
            }
            if(num=='3'){
                p[3][3]=1;
            }
            if(num=='4'){
                p[3][4]=1;
            }
            if(num=='5'){
                p[3][5]=1;
            }
            if(num=='6'){
                p[3][6]=1;
            }
            if(num=='7'){
                p[3][7]=1;
            }
            if(num=='8'){
                p[3][8]=1;
            }
            if(num=='9'){
                p[3][9]=1;
            }
            if(num=='T'){
                p[3][10]=1;
            }
            if(num=='J'){
                p[3][11]=1;
            }
            if(num=='Q'){
                p[3][12]=1;
            }
            if(num=='K'){
                p[3][13]=1;
            }
        }
        //判断草花
        if(hua=='C'){
            if(num=='A'){
                p[4][1]=1;
            }
            if(num=='2'){
                p[4][2]=1;
            }
            if(num=='3'){
                p[4][3]=1;
            }
            if(num=='4'){
                p[4][4]=1;
            }
            if(num=='5'){
                p[4][5]=1;
            }
            if(num=='6'){
                p[4][6]=1;
            }
            if(num=='7'){
                p[4][7]=1;
            }
            if(num=='8'){
                p[4][8]=1;
            }
            if(num=='9'){
                p[4][9]=1;
            }
            if(num=='T'){
                p[4][10]=1;
            }
            if(num=='J'){
                p[4][11]=1;
            }
            if(num=='Q'){
                p[4][12]=1;
            }
            if(num=='K'){
                p[4][13]=1;
            }
        }
    }

最后扫一边数组,看哪些牌有就行了。

AC Code:https://www.luogu.com.cn/discuss/976041