T4308 数据结构判断

https://www.luogu.org/record/show?rid=2143639

题目描述

在世界的东边,有三瓶雪碧。

——laekov

黎大爷为了虐 zhx,给 zhx 出了这样一道题。黎大爷搞了一个数据结构,但

是他没有告诉 zhx 这到底是什么数据结构,我们只知道这是一个数据结构。为了

让 zhx 知道这是什么数据结构,黎大爷制造了很多次的输入和输出操作。每次加

入操作,黎大爷会告诉你他向这个数据结构加入了一个数并告诉你这是多少;每

次取出操作,黎大爷会从数据结构之中取出一个数并告诉这是多少。黎大爷希望

zhx 根据这些操作来判断这是什么数据结构,但是 zhx 觉得这题太难了所以跑路

了,于是黎大爷把这道题扔给了你。

输入输出格式

输入格式:

第一行一个整数N代表操作的数目。

接下来N行,每行两个整数opt,v。如果opt = 1,代表黎大爷把v加入了数据

结构;如果opt = 2,代表了黎大爷从数据结构中取出了一个数,值是v。

输出格式:

输出总共三行,第一行代表数据结构是否可能是栈,第二行代表数据结构是

否可能是队列,第三行代表数据结构是否可能大根堆。每一行的结果都只可能是

“YES”或者“NO” 。

输入输出样例

输入样例#1:

2
1 1
2 1

输出样例#1:

YES
YES
YES

说明

对于100%的数据,1 ≤ n ≤ 10 3 。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<queue>
 5 #include<stack>
 6 using namespace std;
 7 int ans1,ans2,ans3;//默认是目标数据结构
 8 stack<int>s;
 9 queue<int>q;
10 priority_queue<int>heap;
11 int main()
12 {
13     int n;
14     cin>>n;
15     for(int i=1;i<=n;i++)
16     {
17         int p,d;
18         cin>>p;
19         if(p==1)
20         {
21             cin>>d;
22             s.push(d);q.push(d);heap.push(d);
23         }
24         else
25         {
26             cin>>d;
27             if(s.size()==0||q.size()==0||heap.size()==0)
28             {
29                 cout<<"NO"<<endl;
30                 cout<<"NO"<<endl;
31                 cout<<"NO"<<endl;
32                 return 0;
33             }
34             if(d!=s.top())ans1=1;
35             if(s.size()!=0)
36             s.pop();
37
38             if(d!=q.front())ans2=1;
39             if(q.size()!=0)
40             q.pop();
41
42             if(d!=heap.top())ans3=1;
43             if(heap.size()!=0)
44             heap.pop();
45
46         }
47     }
48     if(ans1==0)
49     cout<<"YES"<<endl;
50     else cout<<"NO"<<endl;
51     if(ans2==0)
52     cout<<"YES"<<endl;
53     else cout<<"NO"<<endl;
54     if(ans3==0)
55     cout<<"YES"<<endl;
56     else cout<<"NO"<<endl;
57     return 0;
58 }
时间: 2024-10-06 07:35:42

T4308 数据结构判断的相关文章

不同数据结构的比较原理

不同数据结构判断元素是否相同的比较原理 arraylist   equals hashset    hashCode  equals treeset    自定义比较器的compare的return 0 或是元素自身的compareTo的rutren 0 treeset的看下面的例子 class TreeSetDemo3  { public static void main(String[] args)  { TreeSet ts = new TreeSet(new StudentCompara

《数据结构》学习-- Hash(2) --Separate Chaining

回顾 Separate Chaining简介 Rehash Separate Chaining实现 1 Hash表主体 2 初始化操作 3 Hash Function 4 Find 5 Insert 6 Remove 7 rehash 8 nextPrime HashTable测试 1正确性测试 2 性能测试 总结 本系列是<数据结构与算法分析-C语言描述>(Data Structures and Algorithm Analysis in C,作者Mark Weiss)一书的学习笔记,当我在

javascript新增加的数据结构: Set Map WeakSet WeakMap

一.Set ES6提供新的数据结构Set,类似于Array,不过Array中的值可以重复,但是Set中的值不可以重复 声明: Set函数是一个构造函数 let set = new Set([1,2,3,2]) console.log((new Set([1,2,3,2])).size) // 3 console.log((new Set([NaN, NaN])).size) // 1 console.log((new Set([{}, {}])).size) // 2 console.log((

接口测试困难

一.断言 1.数据结构判断(将值的内容忽略)通过字典键值.列表长度 2.判断预期与响应完全一致(列表按顺序或没有列表的情况) def assert_equal(self,expect_value,response,*args): # 响应结果中的列表顺序必须与预期结果的顺序完全一致,否则会断言失败 global remove_args remove_args = [arg for arg in args] if isinstance(expect_value,(list,tuple)): ass

(DS 《算法入门经典》)UVA 11995 I Can Guess the Data Structure!(判断是哪一种数据结构)

这道题比较简单. 需要注意的一些地方: 1.impossible: 所有的标记量都是false 2.not sure:同时存在2种情况或者同时存在三种情况. Problem I 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 th

【数据结构之旅】顺序栈的定义、初始化、空栈判断、入栈、出栈操作

说明: 往前学习数据结构,想运行一个完整的顺序栈的程序都运行不了,因为书上给的都是一部分一部分的算法,并没有提供一个完整可运行的程序,听了实验课,自己折腾了一下,总算可以写一个比较完整的顺序栈操作的小程序,对于栈也慢慢开始有了感觉.下面我会把整个程序拆开来做说明,只要把这些代码放在一个文件中,用编译器就可以直接编译运行了. 一.实现 1.程序功能 关于栈操作的经典程序,首当要提及进制数转换的问题,利用栈的操作,就可以十分快速地完成数的进制转换. 2.预定义.头文件导入和类型别名 代码如下: #i

数据结构和算法设计专题之---判断单链表中是否有环,环的长度,环的入口节点

题目: 给定一个单链表,只给出头指针head: 1.如何判断是否存在环? 2.如何知道环的长度? 3.如何找出环的连接点在哪里? 4.带环链表的长度是多少? 解法: 1.对于问题1,使用追赶的方法,设定两个指针slow.fast,从头指针开始,每次分别前进1步.2步.如存在环,则两者相遇:如不存在环,fast遇到NULL退出. 2.对于问题2,记录下问题1的碰撞点p,slow.fast从该点开始,再次碰撞所走过的操作数就是环的长度s. 3.问题3:有定理:碰撞点p到连接点的距离=头指针到连接点的

数据结构和算法设计专题之---判断两个链表是否相交并找出交点

题目: 一个比较经典的问题,判断两个链表是否相交,如果相交找出他们的交点. 首先来看一下如何判断两个链表是否存在相交的节点: 思路: 1.碰到这个问题,第一印象是采用hash来判断,将两个链表的节点进行hash,然后判断出节点,这种想法当然是可以的. 2.当然采用暴力的方法也是可以的,遍历两个链表,在遍历的过程中进行比较,看节点是否相同. 3.第三种思路是比较奇特的,在编程之美上看到的.先遍历第一个链表到他的尾部,然后将尾部的next指针指向第二个链表(尾部指针的next本来指向的是null).

(编程训练)再回首,数据结构——(升级版)使用栈判断括号匹配

点击打开 基础版 最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会. 希望这些能提供给初学者一些参考. 在VC++6.0下可运行,当初还写了不少注释. /* ********************************************************** * 3-2 * 设在一个算术表达式中允许使用3种括号:圆括号"(".")",方 * 括号"["."]",花括号"