俏兔子大战傻贼鹰(刚开始接触是写的,一直在草稿箱)

链接:https://ac.nowcoder.com/acm/contest/1838/D
来源:牛客网

题目描述
麻蛇更,麻蛇更,麻蛇不更麻蛇羹,麻蛇更麻蛇也羹。
傻贼鹰今天到兔子家做客因为傻贼鹰听说兔子家的四川省四川大学是一所双流一大学,还有很多漂亮的俏兔子。你作为四川大学英语最好的最俏的俏兔子,被安排接待傻贼鹰。 傻贼鹰来到四川大学被四川大学ACM集训队的兔子拉着打四川麻将,由于傻贼鹰实在学不会麻将,现在兔子们决定复杂一下简单的规则:
1、只有条(索)、筒(饼)、万三种牌共108张每种牌36张(一二三四五六七八九各4张),没有花、风牌和箭牌。
2、必须缺一门可胡且开局确定缺哪一门,即胡牌的时候不能有三种花色的牌。
3、不允许鸣牌(吃碰杠)
4、坎牌:三张连续的同种牌如(一万二万三万),三张同样的牌如(一筒一筒一筒)
5、一对将:两张完全相同的牌如(一条一条)
胡牌规则:
1、平胡:四坎牌加一对将
2、七对子:七对一模一样的牌(缺索:一万一万二万二万一筒一筒三筒三筒五筒五筒六筒六筒九筒九筒) 即使简化了规则,傻贼鹰还是学不会,所以就求你告诉他是不是能胡牌,如果能胡牌你就要用你那专业的英语告诉他Yes,不能胡牌你就要告诉他No
输入描述:
输入有多组数据,每组数据第一行是N(1\le N\le10)(1≤N≤10)表示这一局傻贼鹰对你询问了N次。

第二行是一个大写字母(T:表示筒(饼),S:表示索(条)W,表示万)用来表示定缺牌。

接下来N行,每行一个字符串用来表示询问是否能胡的14张牌的信息。

比如:1W1W2W2W1T1T3T3T5T5T6T6T9T9T
表示:一万一万二万二万一筒一筒三筒三筒五筒五筒六筒六筒九筒九筒

输出描述:
对于傻贼鹰的每一次询问,如果能胡牌输出Yes,不能胡牌输出No。
示例1
输入

5
S
1W1W2W2W1T1T3T3T5T5T6T6T9T9T
1W1W2W2W1T1T3T3T5T5T6T6T9S9S
8T9T1W3W4W5T8T2W8T9T5T5T5W6W
1W2W2W1W3W3W3W9S1W1W2W2W3W9S
3W3W3W3W4W5W6W6W6W7W8W9W9W9W
1
T
1W3W1S1S2S1W2W1W3W2S3S3S2W1W
输出

Yes
No
Yes
No
Yes
Yes
题意分析

#include <bits/stdc++.h>
using namespace std;
int n;
char si, str[25];
int num[3][10];
int main()
{
    while(~scanf("%d %c", &n,&si) ){
        
        for (int l = 1; l <= n; l++){
           for(int j=0;j<3;j++)
           for(int k=0;k<=9;k++)
           num[j][k]=0;
            scanf("%s", str);
            int a = 0;
            for (int i = 0; i < 28; i++){
                if(str[i] == si) {
                    a = 1;
                    break;
                }
            }
            if(a){
                printf("No\n");
                continue;
             }
            for (int i = 1; i < 28; i += 2){
                if(str[i] == 'W')       num[0][str[i - 1] - '0']++;
                else if(str[i] == 'T')  num[1][str[i - 1] - '0']++;
                else                    num[2][str[i - 1] - '0']++;
                // printf("%c\n", str[i - 1]);
            }
            int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0;
            for (int i = 0; i < 3; i++)
                for (int j = 1; j <= 9; j++)
                    if(num[i][j] == 2)
                        sum1++;//对子
             
            for (int i = 0; i < 3; i++){
                for (int j = 1; j <= 7; j++){
                    while(num[i][j] > 0 && num[i][j + 1] > 0 && num[i][j + 2] > 0){
                        sum3++;//坎牌1类
                        num[i][j]--, num[i][j + 1]--, num[i][j + 2]--;//坎牌1类用过
                        // printf("%d\n", j);
                    }
                }
            }
            for (int i = 0; i < 3; i++){
                for (int j = 1; j <= 9; j++){
                    if(num[i][j] == 3) sum4++;//坎牌2类
                    else if(num[i][j] == 2) sum2++;     //消除坎牌1类重复后的对子
                }
            }
            // printf("%d %d %d %d\n", sum1, sum2, sum3, sum4);
            if(sum1 == 7 || (sum2 == 1 && (sum4 + sum3 == 4))) printf("Yes\n");
            else printf("No\n");
        }
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值