您的位置:首页 > 产品设计 > UI/UE

UVA 11995 I Can Guess the Data Structure!

2016-07-01 00:03 274 查看
这题就是让你用 队列,栈,和优先队列分别实现给你的询问。

我直接用的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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  uva