zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    MySQL数据库8(十九)外键
    MySQL数据库8(十八)用户权限管理
    HTML基本样式
    HTML5之部分新特性
    MySQL数据库8(十七)数据库的备份还原
    MySQL数据库8(十六)子查询
    MySQL数据库(十五)联合查询与连接查询
    MySQL数据库8(十四)聚合函数和运算符
    MySQL数据库8(十三)高级数据操作之select指令
    MySQL数据库8(十二)高级数据操作
  • 原文地址:https://www.cnblogs.com/shutdown113/p/9342684.html
Copyright © 2011-2022 走看看