- #include<bits/stdc++.h>
- using namespace std;
- #define TRUE 1
- #define FALSE 0
- #define OK 1
- #define ERROR 0
- #define INFEASIBLE -1
- #define OVERFLOW -2
-
- #define STACK_INIT_SIZE 100
- #define STACKINCREMENT 10
- typedef int Status;
- typedef int SElemType;
- typedef struct {
- SElemType *base;
- SElemType *top;
- int stacksize;
- }SqStack;
- Status InitStack(SqStack &S)
- {
- S.base = (SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType));
- if (!S.base) exit(OVERFLOW);
- S.top = S.base;
- S.stacksize = STACK_INIT_SIZE;
- return OK;
- }
- Status GetTop(SqStack S, SElemType &e)
- {
- if (S.top == S.base) return ERROR;
- e = *(S.top - 1);
- return OK;
- }
- Status Push(SqStack &S, SElemType e)
- {
- if (S.top - S.base >= S.stacksize) {
- S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT) * sizeof(SElemType));
- if (!S.base) exit(OVERFLOW);
- S.top = S.base + S.stacksize;
- S.stacksize += STACKINCREMENT;
- }
- *S.top++ = e;
- return OK;
- }
- Status Pop(SqStack &S, char &e)
- {
- if (S.top == S.base) return ERROR;
- e = *--S.top;
- return OK;
- }
- Status Empty(SqStack &S)
- {
- if (S.top == S.base) return OK;
- else return ERROR;
- }
- int main()
- {
- int n, m;
- scanf("%d %d", &n, &m);
- while (n--) {
- string s; cin >> s;
- char e;
- int len = s.length();
- SqStack S;
- InitStack(S);
- int flag = 1;
- int length = 0;
- for (int i = 0; i < len; i++) {
- if (s[i] == 'S') {
- Push(S, s[i]);
- length++;
- if (length > m) { //D第一种情况,栈得最大的容量超过m的栈得最大容量,
- printf("NO\n"); //输出“NO”
- flag = 0; //用来记录是否已经通过前面的否定情况给输出了
- break;
- }
- }
- else { //“X”,先判断是否为空,在判断是否能POp;
- if (Empty(S)) {
- printf("NO\n"); //如果为空,就要输出“NO”;
- flag = 0; //在将标记指为0;
- break;
- }
- else {
- Pop(S, e);
- length--; //Pop一个就要栈得容量-1;
- }
- }
- }
- if (flag) { //如果前面的情况都过了,只需要考虑是不是空就好了
- if (Empty(S)) printf("YES\n");
- else printf("NO\n");
- }
- }
- return 0;
- }