• uva 11995


    A - I Can Guess the Data Structure!

     题意:

      给出一系列数据的操作,1 x代表向某种抽象数据结构中存入x,2 x代表从该抽象数据结构中取出的元素为x,为该抽象数据结构类型为什么?

      如果是优先队列则先取较大的元素。

    思路:

      对于每种数据结构判断一次,按条件输出即可,注意为空处理。

    代码:

    #include <bits/stdc++.h>
    
    using namespace std;
    #define ll long long
    #define ull unsigned long long
    #define cls(x) memset(x,0,sizeof(x))
    #define clslow(x) memset(x,-1,sizeof(x))
    
    const int mod=1e9+7;
    const int maxn=1e3+100;
    
    int n;
    
    struct Order {
        int x,type;
    };
    Order order[maxn];
    
    bool isStack()
    {
        stack<int>s;
        for(int i=1;i<=n;i++){
            int x=order[i].x;
            int type=order[i].type;
            if(type==1) s.push(x);
            else if(type==2){
                if(s.empty())   return false;
                if(s.top()!=x)  return false;
                s.pop();
            }
        }
        return true;
    }
    
    bool isQueue()
    {
        queue<int>q;
        for(int i=1;i<=n;i++){
            int x=order[i].x;
            int type=order[i].type;
            if(type==1) q.push(x);
            else if(type==2){
                if(q.empty())   return false;
                if(q.front()!=x)  return false;
                q.pop();
            }
        }
        return true;
    }
    
    bool isPriorityQueue()
    {
        priority_queue<int>q;
        for(int i=1;i<=n;i++){
            int x=order[i].x;
            int type=order[i].type;
            if(type==1) q.push(x);
            else if(type==2){
                if(q.empty())   return false;
                if(q.top()!=x)  return false;
                q.pop();
            }
        }
        return true;
    }
    
    int main()
    {
    //    freopen("in.txt","r",stdin);
        while(~scanf("%d",&n))
        {
            for(int i=1;i<=n;i++){
                scanf("%d%d",&order[i].type,&order[i].x);
            }
    
            int cnt=isStack()+isQueue()+isPriorityQueue();
            if(cnt==0){
                printf("impossible
    ");
            }
            else if(cnt==1){
                if(isStack())   printf("stack
    ");
                else if(isQueue())  printf("queue
    ");
                else if(isPriorityQueue())  printf("priority queue
    ");
            }
            else{
                printf("not sure
    ");
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    TestComplete 14 百度网盘下载
    appium 安装
    python 操作yaml文件
    Linux 性能检测常用的10个基本命令
    清除浮动的几种方式及优缺点总结
    css居中布局的几种方式
    css的优先级权重
    移动端1px的边框
    Nuxt.js入门学习
    vue-cli3 中console.log报错
  • 原文地址:https://www.cnblogs.com/shutdown113/p/9342684.html
Copyright © 2020-2023  润新知