zoukankan      html  css  js  c++  java
  • UVA

    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

    ******************************************************************************************************************

    题意:根据操作,判断属于那种数据结构。

    思路:使用STL中对应函数,进行模拟,若矛盾则不符合。

    #include<stdio.h>
    #include<queue>
    #include<stack>
    using namespace std;
    int main()
    {
    	int n;
    	while (~scanf("%d", &n))
    	{
    		stack<int>st;
    		queue<int>qu;
    		priority_queue<int>pr;
    		int a = 1, b = 1, c = 1;
    		for (int i = 0; i < n; i++)
    		{
    			int x, y;
    			scanf("%d %d", &x, &y);
    			if (x == 1)//向其中加入数据
    			{
    				st.push(y);
    				qu.push(y);
    				pr.push(y);
    			}
    			else
    			{
    				if (st.empty())
    				{
    					a = b = c = 0;
    					continue;
    				}
    				if (a)
    					a = (st.top() == y);//判断顶部的数是否与y相等
    				if (b)
    					b = (qu.front() == y);
    				if (c)
    					c = (pr.top() == y);
    				st.pop();
    				qu.pop();
    				pr.pop();
    			}
    		}
    		if (a + b + c > 1)
    			printf("not sure
    ");
    		else if (a)
    			printf("stack
    ");
    		else if (b)
    			printf("queue
    ");
    		else if (c)
    			printf("priority queue
    ");
    		else
    			printf("impossible
    ");
    	}
    
    	return 0;
    }





  • 相关阅读:
    ubuntu更换阿里源
    记一次开源软件的篡改
    linux下搜索指定内容
    随笔_1
    单细胞中的细胞类型划分
    scDNA-seq genomic analysis pipline
    NIH周三讲座视频爬虫
    ggplot2_bubble
    TCGA数据批量下载
    lncRNA芯片重注释
  • 原文地址:https://www.cnblogs.com/csu-lmw/p/9124473.html
Copyright © 2011-2022 走看看