程序代码:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
#define OK 1
#define OVERFLOW -2
#define ERROR 0
#define TRUE 1
#define FALSE 0
#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) return OVERFLOW;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}
Status StackEmpty(SqStack S) {
if(S.top==S.base) return TRUE;
else return FALSE;
}
Status GetTop(SqStack S,SElemType &e) {
if(!S.base) return ERROR;
e=*(S.top-1);
return e;
}
Status Push(SqStack &S,SElemType e) {
if(!S.base) return ERROR;
if(S.top-S.base>=S.stacksize) {
S.base=(SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
if(!S.base) return OVERFLOW;
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}
Status Pop(SqStack &S,SElemType &e) {
if(S.top==S.base) return ERROR;
e=*(--S.top);
return OK;
}
int check_valid (char in[], char out[], int length)
{
int i=0, j=0;
SElemType e;
SqStack s;
InitStack(s);
if (in==NULL || out==NULL || length <=0)
return -1;
for (i=0; i<length; i++)
{
Push(s,in[i]);
while (!StackEmpty(s) && GetTop(s,e)==out[j]) {
Pop(s,e);
j++;
}
}
if (StackEmpty(s))
return 1;
return 0;
}
int main (int argc, char *argv[])
{
int n,m;
int i;
char in[101],out[101];
scanf("%d %d", &n, &m);
scanf("%s",&in);
while(n!=0 && m!=0)
{
for(i=1;i<=m;i++)
{
scanf("%s",out);
if( check_valid(in,out,n)>0)
printf("YES\n");
else
printf("NO\n");
}
}
return 0;
}
acm输出超限,大神修改一下