当前位置: 代码迷 >> 综合 >> 猜猜数据结构(I Can Guess the Data Structurel!,UVA-11995 )
  详细解决方案

猜猜数据结构(I Can Guess the Data Structurel!,UVA-11995 )

热度:67   发布时间:2023-11-22 01:08:40.0

题目链接

https://vjudge.net/problem/UVA-11995

题意

给定一个数据结构,其支持两种操作:
1 x
2
操作1 x为插入一个值x,操作2删除一个元素并返回所删除元素的值。现要求你判断该数据结构属于队列、栈、优先队列哪种。

分析

模拟三种数据结构,然后与每次操作2的结果进行对比。一旦有一次操作不满足所模拟的数据结构的要求,就排除该数据结构。

代码

#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <stack>using namespace std;stack<int> sta;
queue<int> que;
priority_queue<int> pri;
void init()
{while(!que.empty()) que.pop();while(!sta.empty()) sta.pop();while(!pri.empty()) pri.pop();
}
int main()
{int n;while(cin>>n){init();int fa=1,fb=1,fc=1; //初始化都为真for(int i=0;i<n;i++){int op,x;cin>>op>>x;if(op==1){//模拟三种操作que.push(x);sta.push(x);pri.push(x);}else{int a=1e4,b=1e4,c=1e4;//初始化为非x值//模拟三种操作if(!sta.empty()) //加非空条件防止运行错误{a=sta.top();sta.pop();}if(!que.empty()){b=que.front();que.pop();}if(!pri.empty()){c=pri.top();pri.pop();}//用排除法去排除不满足的数据结构if(a!=x) fa=0;if(b!=x) fb=0;if(c!=x) fc=0;}}string ans;//判断属于哪一种int sum=fa+fb+fc;if(sum==0) ans="impossible";else if(sum==2 || sum==3) ans="not sure";else{if(fa) ans="stack";else if(fb) ans="queue";else ans="priority queue";}cout<<ans<<endl;}return 0;
}
  相关解决方案