pta编程问题测试点过不去

假设彩虹瓶里要按顺序装 N 种颜色的小球(不妨将顺序就编号为 1 到 N)。现在工厂里有每种颜色的小球各一箱,工人需要一箱一箱地将小球从工厂里搬到装填场地。如果搬来的这箱小球正好是可以装填的颜色,就直接拆箱装填;如果不是,就把箱子先码放在一个临时货架上,码放的方法就是一箱一箱堆上去。当一种颜色装填完以后,先看看货架顶端的一箱是不是下一个要装填的颜色,如果是就取下来装填,否则去工厂里再搬一箱过来。

#include 
using namespace std;
typedef struct queue1
{
    int *data;
}lqueue,*queue;
typedef struct pt
{
    int front = 0;
    int rear = 0;
}pt1,*Q1;
typedef struct stack1
{
    int *data;
    int top;
}lstack,*stack;
queue create(queue h,int n,int k)
{
    queue p;
    p = h;
    p->data = new int[n*k];
    return p;
}
stack create1(stack h,int m)
{
    stack p;
    p = h;
    p->data = new int[m];
    p->top = -1;
    return p;
}
int main()
{
    lqueue qe;
    queue q;
    q = &qe;
    int n,m,k;
    cin>>n>>m>>k;
    q = create(q,n,k);
    pt1 ptaa;
    Q1 Q;
    Q = &ptaa;
    for(int i = 1;i <= n*k;i++)
    {
        int x;
        cin>>x;
        q->data[Q->rear++] = x;
    }
    lstack st;
    stack s;
    s = &st;
    s = create1(s,m);
    int i = 1,mask = 1,f = 0;
    for(;i <= k;i++)
    {
        Q->front = (i-1)*n;
        mask = 1;
        s->top = -1;
        while(Q->front < i*n)
        {
            if(q->data[Q->front] == mask)
            {
                mask++;
                if(s->top == -1)
                {
                    Q->front++;
                }
                else
                {
                    if(mask == s->data[s->top])
                    {
                        s->top--;
                        Q->front++;
                    }
                    else
                    {
                        int t;
                        t = s->top;
                        s->top--;
                        while(s->top != -1)
                        {
                            if(s->data[s->top] == mask)
                            {
                                cout<<"NO"<1;
                                break;
                            }
                            else
                                s->top--;
                        }
                        s->top = t;
                        Q->front++;
                    }
                }
            }
            else
            {
                 s->data[++s->top] = q->data[Q->front++];
                if(s->top == m)
                {
                    cout<<"NO"<1;
                    break;
                }
            }
            if(f == 1)
            {
                break;
            }
        }
        if(f == 1)
        {
            f = 0;
            continue;
        }
        cout<<"YES"<