这题就是让你用 队列,栈,和优先队列分别实现给你的询问。
我直接用的sql实现的,比较简单吧。
AC代码:
/* ***********************************************
Author :yzkAccepted
Created Time :2016/6/30 19:57:59
TASK :ggfly.cpp
LANG :C++
************************************************ */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <stack>
using namespace std;
int m;
struct node{
int v, k;
friend bool operator < (node a,node b){
return a.v<b.v;
}
}s[1000+100];
bool Isqueue()
{
queue<int> my;
for(int i=1;i<=m;i++){
if(s[i].k==1)
my.push(s[i].v);
if(s[i].k==2){
if(my.empty()==1)
return 0;
if(my.front()==s[i].v){
my.pop();
continue;
}
else return 0;
}
}
return 1;
}
bool Isstack()
{
stack<int> my;
for(int i=1;i<=m;i++)
{
if(s[i].k==1)
my.push(s[i].v);
if(s[i].k==2){
if(my.empty()==1)
return 0;
if(my.top()==s[i].v){
my.pop();
continue;
}
else return 0;
}
}
return 1;
}
bool Ispriqueue()
{
priority_queue<node> my;
for(int i=1;i<=m;i++){
if(s[i].k==1)
my.push(s[i]);
if(s[i].k==2){
if(my.empty()==1)
return 0;
if(my.top().v==s[i].v){
my.pop();
continue;
}
else return 0;
}
}
return 1;
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int i;
while(~scanf("%d",&m))
{
for(i=1;i<=m;i++)
scanf("%d%d",&s[i].k,&s[i].v);
int queue,stack,pq;
queue=Isqueue();
// cout<<queue<<endl;
stack=Isstack();
pq=Ispriqueue();
if(queue+stack+pq>1)
cout<<"not sure"<<endl;
else if(queue) printf("queue\n");
else if(stack) printf("stack\n");
else if(pq) printf("priority queue\n");
else printf("impossible\n");
//cout<<queue<<stack<<pq<<endl;
}
return 0;
}