模拟+栈+队列+优先队列UVA-11995

I Can Guess the Data Structure!

注意点:
如果ADT已经为空了,确仍然返回了一个“正常值”,说明三者都不可能。

#include<stdio.h>
#include<iostream>
#include<cmath>
#include<math.h>
#include<string>
#include<string.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<map>
#define ms0(a) memset(a,0,sizeof(a))
#define ll long long
#define INF 0x3f3f3f3f
using namespace std;

bool isStack=true,isQueue=true,isPQ=true;

int main()
{
    int n,op,x;
    while (~scanf("%d",&n))
    {
        isStack=true;isQueue=true;isPQ=true;
        stack<int> sk;
        queue<int> q;
        priority_queue<int> pq;
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&op,&x);
            if(op==1)
            {
                sk.push(x);
                q.push(x);
                pq.push(x);
            }
            else
            {
                if(sk.size())
                {
                    int x1 =sk.top();sk.pop();
                    if(x1!=x)
                        isStack=false;
                    int x2 =q.front();q.pop();
                    if(x2!=x)
                        isQueue=false;
                    int x3 =pq.top();pq.pop();
                    if(x3!=x)
                        isPQ=false;
                }
                else
                {
                    isStack=false;
                    isQueue=false;
                    isPQ=false;
                }
            }
        }
        int flag = isStack+isQueue+isPQ;
        if(flag==0) printf("impossible\n");
        else if(flag>=2) printf("not sure\n");
        else
        {
            if(isStack)
                printf("stack\n");
            if(isQueue)
                printf("queue\n");
            if(isPQ)
                printf("priority queue\n");
        }
    }
    return 0;
}

发布了67 篇原创文章 · 获赞 0 · 访问量 1491

猜你喜欢

转载自blog.csdn.net/qq_44846324/article/details/104615865