当前位置: 代码迷 >> 综合 >> UVA11995 I Can Guess the Data Structure! ADT+STL
  详细解决方案

UVA11995 I Can Guess the Data Structure! ADT+STL

热度:36   发布时间:2024-01-15 07:25:10.0

题意翻译

猜猜数据结构

试题描述:

你有一个类似“包包”的数据结构,支持两种操作,如下表所示。 1x:把元素x放进包包 2:从包包中拿出一个元素 给出一系列操作以及返回值,你的任务是猜猜这个“包包”到底是什么。它可能是一个栈<后进先出),队列(先进先出),优先队列(数值大的整数先出)或者其他什么奇怪的东西。

输入:

第一行为一个整数n(1≤n≤1 000)。以下n行每行要么是一条类型1的命令,要么是一条类型2的命令后面跟着一个整数x(1≤x≤100)。这个整数x表示执行完这条类型2的命令后,包包无错地返回了x。输入文件大小不超过1MB。

输出:

输出一行。一共有5种可能的输出。

stack:一定是一个栈

queue:一定是一个队列

priority queue:一定是一个优先队列

impossible:一定不是以上三种

not sure:至少有两种是可能的

输入示例:

5 1 5 1 3 1 2 2 2 2 3

输出示例:

stack

题目描述

PDF

输入输出格式

输入格式:

 

 

输出格式:

 

 

输入输出样例

输入样例#1: 复制

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

输出样例#1: 复制

queue
not sure
impossible
stack
priority queue

分析:

简单模拟就行

#include<vector>
#include<cstdio>
#include<stack>
#include<queue>
using namespace std;struct Data_Struct
{//vc存放指令pair序列vector<pair<int,int> > vc;//构造函数Data_Struct(int n){for(int i=0;i<n;i++){int x,y;scanf("%d%d",&x,&y);vc.push_back(make_pair(x,y));}}//判断是否可能是一个栈bool is_stack(){stack<int> S;for(int i=0;i<vc.size();i++){int x=vc[i].first, y=vc[i].second;if(x==1) S.push(y);else if(x==2){if(S.empty() || S.top()!=y ) return false;S.pop();}}return true;}//判断是否可能是一个队列bool is_queue(){queue<int> Q;for(int i=0;i<vc.size();i++){int x=vc[i].first, y=vc[i].second;if(x==1) Q.push(y);else if(x==2){if(Q.empty() || Q.front()!=y ) return false;Q.pop();}}return true;}//判断是否可能是一个优先队列bool is_priority_queue(){priority_queue<int> Q;for(int i=0;i<vc.size();i++){int x=vc[i].first,y=vc[i].second;if(x==1) Q.push(y);else{if(Q.empty() || Q.top()!=y )return false;Q.pop();}}return true;}//输出整合后的结果void solve(){int S=is_stack(), Q=is_queue(), PQ=is_priority_queue();if(S+Q+PQ==0) printf("impossible\n");else if(S+Q+PQ==1){if(S) printf("stack\n");else if(Q) printf("queue\n");else if(PQ) printf("priority queue\n");}else if(S+Q+PQ>1)printf("not sure\n");}
};int main()
{int n;while(scanf("%d",&n)==1){Data_Struct ds(n);ds.solve();}return 0;
}

 

  相关解决方案