1208: 数据结构
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 121 Solved: 33
[ Submit][ Status][ Web Board]
Description
你有一个奇怪的数据结构,他可能是栈(stack),队列(queue),优先队列(priority_queue),或者其他什么奇怪的东西。
假设有n个元素依次进入这个数据结构,并且知道这些元素出去的顺序,你能告诉我这个数据结构是什么吗?
Input
输入包括多组测试数据,每组测试数据的第一行为一个正整数n(1<=n<=1000),第二行包括n个整数代表进入的顺序,第三行也有n个整数代表出去的顺序。
Output
对于每组测试数据,输出可能的数据结构名字。如果有多个数据结构满足,则按顺序输出。若没有数据结构满足,则输出“none”。
Sample Input
3
1 2 3
1 2 3
3
1 2 1
1 2 1
Sample Output
queue priority_queue
stack queue
【解析】
此题的话需要知道优先队列是怎么输出的有两种输出可以自定义,先让小的元素先输出,另一种是让大的元素先输
出,然后我们直接模拟就好了我是把所有的可能性都列举出来了。
#include<iostream>
#include<string>
#include<vector>
#include<cstdio>
#include<algorithm>
using namespace std;
vector<int>a,b;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int n,m,i;
int count,flag1,flag2,flag3,flag4;
while(~scanf("%d",&n))
{
count=0;
flag1=0;
flag2=0;
flag3=0;
flag4=0;
int c[1010]={0};
int d[1010]={0};
a.clear();
b.clear();
for(i=0;i<n;i++)
{
scanf("%d",&m);
c[i]=m;
d[n-1-i]=m;
a.push_back(m);
}
for(i=0;i<n;i++)
{
scanf("%d",&m);
b.push_back(m);
}
sort(c,c+n);
for(i=0;i<n;i++)
{
if(b[i]==c[i])
count++;
else if(b[i]!=c[i])
break;
}
if(count==n)//优先队列
flag1=1;
count=0;
for(i=0;i<n;i++)
{
if(a[i]==b[i])
count++;
else if(a[i]!=b[i])
break;
}
if(count==n)
flag2=1;//队列
count=0;
for(i=0;i<n;i++)
{
if(d[i]==b[i])
count++;
else if(d[i]!=b[i])
break;
}
if(count==n)
flag3=1;//栈
sort(c,c+n,cmp);
count=0;
for(i=0;i<n;i++)
{
if(c[i]==b[i])
count++;
else
break;
}
if(count==n)
flag4=1;
if((flag1==1||flag4==1)&&flag2==1&&flag3==0)
{
cout<<"queue priority_queue"<<endl;
}
else if((flag1==1||flag4==1)&&flag2==0&&flag3==0)
{
cout<<"priority_queue"<<endl;
}
else if((flag1==1||flag4==1)&&flag2==1&&flag3==1)
{
cout<<"stack queue priority_queue"<<endl;
}
else if(flag1==0&&flag2==0&&flag3==0&&flag4==0)
{
cout<<"none"<<endl;
}
else if(flag1==0&&flag4==0&&flag2==0&&flag3==1)
{
cout<<"stack"<<endl;
}
else if(flag1==0&&flag4==0&&flag2==1&&flag3==0)
{
cout<<"queue"<<endl;
}
else if((flag1==1||flag4==1)&&flag2==0&&flag3==1)
{
cout<<"stack priority_queue"<<endl;
}
else if(flag1==0&&flag2==1&&flag3==1&&flag4==0)
{
cout<<"stack queue"<<endl;
}
}
return 0;
}