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

UVA 11995 I Can Guess the Data Structure!

2016-10-23 11:27 781 查看
There is a bag-like data structure, supporting two operations:

1

x

Throw an element x into the bag.

2

Take out an element from the bag.

Given a sequence of operations with return values, you’re going to guess the data structure. It is

a stack (Last-In, First-Out), a queue (First-In, First-Out), a priority-queue (Always take out larger

elements rst) or something else that you can hardly imagine!

Input

There are several test cases. Each test case begins with a line containing a single integer

n

(1



n



1000). Each of the next

n

lines is either a type-1 command, or an integer 2 followed by an integer

x

.

That means after executing a type-2 command, we get an element

x

without error

. The value of

x

is always a positive integer not larger than 100. The input is terminated by end-of- le (EOF).

Output

For each test case, output one of the following:

stack

It’s de nitely a stack.

queue

It’s de nitely a queue.

priority queue

It’s de nitely a priority queue.

impossible

It can’t be a stack, a queue or a priority queue.

not sure

It can be more than one of the three data structures men-

tioned above.

SampleInput

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

SampleOutput

queue

not sure

impossible

stack

priority queue

开三个stl,模拟吧。

注意re。

#include<iostream>
#include<cstdio>
#include<stack>
#include<queue>
using namespace std;
int n,cnt;
stack<int>stk;
queue<int>q1;
priority_queue<int>q2;
bool flg[4];
int main()
{
while(scanf("%d",&n)==1)
{
for(int i=1;i<=3;i++)
flg[i]=0;
cnt=0;
while(!stk.empty())
stk.pop();
while(!q1.empty())
q1.pop();
while(!q2.empty())
q2.pop();
for(int i=1;i<=n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
if(x==1)
{
stk.push(y);
q1.push(y);
q2.push(y);
}
else
{
if(stk.empty())
flg[1]=1;
else
{
if(stk.top()!=y)
flg[1]=1;
stk.pop();
}
if(q1.empty())
flg[2]=1;
else
{
if(q1.front()!=y)
flg[2]=1;
q1.pop();
}
if(q2.empty())
flg[3]=1;
else
{
if(q2.top()!=y)
flg[3]=1;
q2.pop();
}
}
}
for(int i=1;i<=3;i++)
if(!flg[i])
cnt++;
if(cnt==1)
{
if(!flg[1]&&flg[2]&&flg[3])
printf("stack\n");
if(flg[1]&&!flg[2]&&flg[3])
printf("queue\n");
if(flg[1]&&flg[2]&&!flg[3])
printf("priority queue\n");
}
else if(cnt>1)
printf("not sure\n");
else
printf("impossible\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: