• uva-11995


    11995 - I Can Guess the Data Structure!

      There is a bag-like data structure, supporting two operations:
    1 x Throw an element x into the bag.
    2 Take out an element from the bag.
    Given a sequence of operations with return values, you’re going to guess the data structure. It is
    a stack (Last-In, First-Out), a queue (First-In, First-Out), a priority-queue (Always take out larger
    elements first) or something else that you can hardly imagine!
    Input
    There are several test cases. Each test case begins with a line containing a single integer n (1 ≤ n ≤
    1000). Each of the next n lines is either a type-1 command, or an integer 2 followed by an integer x.
    That means after executing a type-2 command, we get an element x without error. The value of x
    is always a positive integer not larger than 100. The input is terminated by end-of-file (EOF).
    Output
    For each test case, output one of the following:
    stack It’s definitely a stack.
    queue It’s definitely a queue.
    priority queue It’s definitely a priority queue.
    impossible It can’t be a stack, a queue or a priority queue.
    not sure It can be more than one of the three data structures mentioned
    above.
    Sample Input
    6
    1 1
    1 2
    1 3
    2 1
    2 2
    2 3
    6
    1 1
    1 2
    1 3
    2 3
    2 2
    2 1
    2
    1 1
    2 2
    4
    1 2
    1 1
    2 1
    2 2
    7
    1 2
    1 5
    1 1
    1 3
    2 5
    1 4
    2 4
    Sample Output
    queue
    not sure
    impossible
    stack
    priority queue

    题意:水。。。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    #include<vector>
    #include<stack>
    using namespace std;
    const int INF=0x3f3f3f3f;
    #define mem(x,y) memset(x,y,sizeof(x))
    #define SI(x) scanf("%d",&x)
    #define SL(x) scanf("%lld",&x)
    #define PI(x) printf("%d",x)
    #define PL(x) printf("%lld",x)
    #define P_ printf(" ")
    #define T_T while(T--)
    #define F(i,s,x) for(i=s;i<x;i++)
    const double PI=acos(-1.0);
    typedef long long LL;
    int main(){
    	int n;
    	while(~SI(n)){
    		int x,t;
    		queue<int>q;
    		priority_queue<int>sq;
    		stack<int>S;
    		int a=1,b=1,c=1;
    		int temp=0;
    		while(n--){
    			SI(t);SI(x);
    			if(temp)continue;
    			if(t==1){
    				q.push(x);
    				sq.push(x);
    				S.push(x);
    			}
    			else{
    				if(q.empty())temp=1;
    				if(temp)continue;
    				if(q.front()!=x)a=0;
    				if(sq.top()!=x)b=0;
    				if(S.top()!=x)c=0;
    				q.pop();
    				sq.pop();
    				S.pop();
    			}
    		}
    		if(temp||(a+b+c==0))puts("impossible");
    		else if(a+b+c>1)puts("not sure");
    		else if(a)puts("queue");
    		else if(b)puts("priority queue");
    		else if(c)puts("stack");
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    ISBN号码
    计数问题
    小玉在游泳
    数字反转
    单调队列(学习笔记)
    LCA(学习笔记)
    emacs配置文件
    线段树(学习笔记)
    RMQ问题 ST算法(学习笔记)
    Lucas卢卡斯定理(学习笔记)
  • 原文地址:https://www.cnblogs.com/handsomecui/p/5010531.html
Copyright © 2020-2023  润新知