我总感觉这道题过了的代码有问题,我自己出了一个样例
如果定缺牌是S的话,有一次查询:
1T1T3T3T3T4T5T6T7T7T7T8T8T8T
按照下面的代码来算的话(下面的代码A了),结果是“No”。
但是这次询问完全可以算是“Yes”的啊,
一对:1T1T
四个坎牌:
3T3T3T
7T7T7T
8T8T8T
4T5T6T
所以说这道题还有待商榷,如果有大佬能帮我解惑请在下方留言,十分感谢

#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <vector>
#include <stack>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stdlib.h>
typedef long long ll;
using namespace std;
int main()
{
    int n;
    while(cin >> n) //询问多少次
    {
        char que;
        cin>>que; //定缺牌
        while(n--) //一共n次询问
        {
            string x;
            cin >> x;              //记录的是每次询问的28个字符(14张牌)
            int t[10]={0};
            int s[10]={0};
            int w[10]={0};
            int ht,hs,hw;
            ht=hs=hw=0; //分别表示有没有出现定缺牌
            /* ASCLL码的知识点:0-9的ASCLL码是48~57,a-z的ASCLL码是97~122,A-Z的ASCLL码是65~90 */

            for(int j=0;j<28;j+=2) //一共14张牌,每张牌占据两个字符,偶数位是数字,奇数位是字符
            {
                if(x[j+1]=='T')
                {
                    t[x[j]-'0']++;
                    ht=1; //表示T出现过
                }
                if(x[j+1]=='S')
                {
                    s[x[j]-'0']++;
                    hs=1; //表示S出现过
                }
                if(x[j+1]=='W')
                {
                    w[x[j]-'0']++;
                    hw=1; //表示W出现过
                }
            }
            if((que=='S'&&hs==1)||(que=='T'&&ht==1)||(que=='W'&&hw==1)) //如果出现定缺牌,直接输出No
            {
                cout << "No" << endl;
            }
            else
            {
                int kz=0,dj=0; //kz记录的是坎牌(三张连续的同种牌,或者是三张一样的牌,先进行判断连续的牌,再进行判断三张一样的牌)
                for(int j=1;j<=7;j++)  //每种牌一共有九种数字,相邻的三个进行判断,所以只需要判断七次就可以了
                {
                    while(t[j] && t[j+1] && t[j+2] )  //先将所有可能是三张连续的同种牌记做坎牌
                    {
                        kz++; t[j]--; t[j+1]--; t[j+2]--;
                    }
                    while(s[j] && s[j+1] && s[j+2])
                    {
                        kz++; s[j]--; s[j+1]--; s[j+2]--;
                    }
                    while(w[j] && w[j+1] && w[j+2] )
                    {
                        kz++; w[j]--; w[j+1]--; w[j+2]--;
                    }
                }
                for(int j=1;j<=9;j++) //每种牌,如果是二的倍数,那么对子++,如果是三的倍数,那么是坎牌++
                {
                    if(t[j]%2==0) {dj+=t[j]/2;t[j]=0;}
                    if(t[j]%3==0) {kz+=t[j]/3;t[j]=0;}
                    if(s[j]%2==0) {dj+=s[j]/2;s[j]=0;}
                    if(s[j]%3==0) {kz+=s[j]/3;s[j]=0;}
                    if(w[j]%2==0) {dj+=w[j]/2;w[j]=0;}
                    if(w[j]%3==0) {kz+=w[j]/3;w[j]=0;}
                }
                if(dj==7||(kz==4&&dj==1))  cout<<"Yes"<<endl;
                else cout<<"No"<<endl;
            }
        }
    }
    return 0;
}