例题3.1 猜猜数据结构 UVa11995

1.题目描述:点击打开链接

2.解题思路:本题要求根据输入的数据和输出的数据来猜测一种可能的数据结构,备选答案有“栈,队列,优先队列”,结果也可能都不是或者不确定。STL中已经有这三种数据结构了,因此直接模拟题意,输出时判断是否对应即可。注意:弹出时要判断一下是否已经为空。

3.代码:

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
#include<set>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#include<deque>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<functional>
using namespace std;

stack<int>s;
queue<int>q;
priority_queue<int>p;
char st[][20] = { "impossible", "priority queue", "queue","not sure" , "stack", "not sure","not sure" ,"not sure"  };
void clear()
{
	while (!s.empty())s.pop();
	while (!q.empty())q.pop();
	while (!p.empty())p.pop();
}
void add(int x)
{
	s.push(x);
	q.push(x);
	p.push(x);
}
void pop()
{
	if (!s.empty())s.pop();
	if (!q.empty())q.pop();
	if (!p.empty())p.pop();
}
int main()
{
	//freopen("t.txt", "r", stdin);
	int n;
	while (~scanf("%d", &n))
	{
		clear();
		int ok1, ok2, ok3;
		ok1 = ok2 = ok3 = 1;
		for (int i = 0; i < n; i++)
		{
			int a, b;
			cin >> a >> b;
			if (a == 1)add(b);//统一添加
			else
			{
				if (s.empty() || s.top() != b)
					ok1 = 0;
				if (q.empty() || q.front() != b)
					ok2 = 0;
				if (p.empty() || p.top() != b)
					ok3 = 0;
				pop();//统一弹出
			}
		}
		int x = (ok1 << 2) | (ok2 << 1) | ok3;//编码,方便输出结果
		printf("%s\n", st[x]);
	}
	return 0;
}
时间: 2024-08-30 02:09:53

例题3.1 猜猜数据结构 UVa11995的相关文章

例3.1 猜猜数据结构 UVa11995

1.标题叙述性说明:点击打开链接 2.解题思路:据来推測一种可能的数据结构,备选答案有"栈,队列.优先队列".结果也可能都不是或者不确定. STL中已经有这三种数据结构了,因此直接模拟题意,输出时推断是否相应就可以.注意:弹出时要推断一下是否已经为空. 3.代码: #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string> #inclu

【暑假】[实用数据结构]UVa11995 I Can Guess the Data Structure!

UVa11995  I Can Guess the Data Structure! 思路:边读边模拟,注意empty的判断! 代码如下: #include<iostream> #include<queue> #include<stack> using namespace std; int main(){ queue<int> q; priority_queue<int> pri_q; stack<int> sta; int n; wh

UVa 11995 猜猜数据结构

代码来自蓝书第三章第一题,思路很清晰.主要实现过程中需要区分以下数据结构: stack queue priority_queue #include<cstdio> #include<queue> #include<stack> #include<cstdlib> using namespace std; const int maxn = 1000 + 10; int n, t[maxn], v[maxn]; int check_stack() { stack

剑指offer-第二章数据结构(数组,字符串,链表,树,栈与队列)及例题

一.数组(最简单的数据结构) 定义:占据一块连续内存并按照顺序存储数据.创建时先指定大小,分配内存. 优点:时间效率高.实现简单的hash(下标为key,对应的数据为value) 缺点:空间效率差.如果我们只在数组中存一个数字,也先分配所有的内存. 扩展:动态数组(解决空间效率差),手段:扩容后,复制内容到新的数组,释放之前的内存.时间性能变差,因此,要尽量减少改变数组容量的次数. 数组与指针:声明一个数组时,数组名字也是一个指针,指向数组的第一个元素. 例题:在一个二维数组中,每一行都按照从左

(Updating)【区间操作数据结构例题】

Description 你需要写一种数据结构,来维护一个集合 A(元素可重复),其中需要支持如下操作: Insert(A,x):向集合 A 中插入一个整数 x. Delete(A,x):删除集合 A 中值为整数 x 的元素,若有多个相同的数,只删除一个,若 x 不存则忽略. Max(A):查询集合中最大的元素,若不存在则忽略. Min(A):查询集合中最小的元素,若不存在则忽略. Find(A,x):查询整数 x 的元素是否存在,若存在输出Y,否则输出N. Pred(A,x):查询求 x 的前驱

数据结构例题2

题目 我们开一棵线段树记录某个深度中最大的\(dis\). 同时利用dfs序来让每条长链开一个线段树并且保证不重复. 遍历到某个点时,先处理重儿子,然后把自己加入线段树,计算一端为自己另一端在重儿子子树中的答案. 然后处理每个轻儿子,暴力计算一端在该轻儿子所在子树中,另一端在该点已遍历过的子树中的答案,然后把该轻儿子子树中的所有线段树合并到该点来. #include<bits/stdc++.h> #define LL long long #define pb push_back #define

3.1 基础数据结构回顾

例题1  uva11995  http://acm.hust.edu.cn/vjudge/problem/18700 猜测符合哪种数据结构 , 用stl模拟判断. 1 //#define txtout 2 //#define debug 3 #include<bits/stdc++.h> 4 #define mt(a,b) memset(a,b,sizeof(a)) 5 using namespace std; 6 typedef long long LL; 7 const double pi

acm常见算法及例题

转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题 初期:一.基本算法:     (1)枚举. (poj1753,poj2965)     (2)贪心(poj1328,poj2109,poj2586)     (3)递归和分治法.     (4)递推.     (5)构造法.(poj3295)     (6)模拟法.(poj1068,poj2632,poj1573,poj2993,poj2996)二.图算法

Redis各种数据结构性能数据对比和性能优化实践

很对不起大家,又是一篇乱序的文章,但是满满的干货,来源于实践,相信大家会有所收获.里面穿插一些感悟和生活故事,可以忽略不看.不过听大家普遍的反馈说这是其中最喜欢看的部分,好吧,就当学习之后轻松一下. Redis各种数据结构性能数据对比 测试工具:perf4j 性能指标:平均值,最小值,最大值,方差 对比将814条数据按单条插入到哈希MAP和哈希SET: 对比从814条数据的哈希MAP和哈希SET中判断一个元素是否存在(map的hasKey和set的isMember): 大量数据插入哈希MAP,运