K-データ構造実験スタックとキュー11:駐車場の更新

説明

リフレッシュは最近大金を稼ぎ、駐車場を開設しました。土地が限られているため、駐車場の駐車スペースは限られていますが、駐車場に入るには車両が多すぎます。駐車場が満車になると、入りたい車両が歩道に入って待機し、最初に歩道に入った車両が優先されます。

駐車場に入る、および駐車場の構造は、唯一の出て行く車両が駐車場に入る最後の車両でなければならないことを要求する。ここで、駐車場の容量Nとコマンドの数M、およびいくつかのコマンドを教えてください(numを追加すると、ナンバープレート番号numの車両が駐車場または歩道に入る必要があります。

Delは、車が駐車場から出たことを意味し、Outは、歩道の前にある車両が駐車場に入るのを待たずに諦めないことを意味します。歩道の車両数が1,000,000台を超えないと仮定します。
入力

入力は複数のデータセットです。データセットごとに、最初にNとM(0 <n、m <200000)を入力してから、Mコマンドを入力します。
出力

入力が完了した後、駐車場に車がなくてDelが表示されるか、歩道に車がなくOutが表示されると、エラーが出力されます。それ以外の場合は、駐車場にある車が出力されます。
サンプル

入力

2 6
[追加] 18353364208
[追加] 18353365550
[追加] 18353365558
[追加] 18353365559
デル
・アウトの
出力

18353365558
18353364208

#include <stdio.h>
#include <string.h>

int main()
{
    
    
    int n,m,i,j,flag;
    int top,top1;
    char a[200000][20],c[20],b[200000][20],d[20];
    while(scanf("%d%d",&m,&n) != EOF)
    {
    
    
        flag = 0;top=0,top1=0;
        for(i = 0;i < n;i++)
        {
    
    
            scanf("%s",c);
            if(strcmp("Add",c) == 0)
            {
    
    
                scanf("%s",d);
                if(top < m)
                {
    
    
                    top++;
                    strcpy(a[top],d);
                }
                else
                {
    
    
                    top1++;
                    strcpy(b[top1],d);
                }

            }
            if(strcmp("Del",c) == 0)
            {
    
    
                if(top<1)
                {
    
    
                    flag = 1;
                }
                else
                {
    
    
                    if(top1>0)
                    {
    
    
                        strcpy(a[top],b[1]);
                        for(j = 1;j < top1;j++)
                        {
    
    
                            strcpy(b[j],b[j+1]);
                        }
                        top1--;
                    }
                    else
                    top--;
                }
            }
            if(strcmp("Out",c) == 0)
            {
    
    
                if(top1 < 1)
                    flag = 1;
                else
                {
    
    
                for(j = 1;j < top1;j++)
                {
    
    
                    strcpy(b[j],b[j+1]);
                }
                top1--;
                }
            }
        }
        if(flag)
        {
    
    
            printf("Error\n");
        }
        else
        {
    
    
            for(i = top;i >= 1;i--)
            {
    
    
                printf("%s\n",a[i]);
            }
        }
    }
    return 0;
}

おすすめ

転載: blog.csdn.net/a675891/article/details/103955181