学不会今天的内容——种树,只能补补昨天的题了OTZ
先补了个昨天的G题(竟因没反应过来priority queue是优先队列没有写QAQ太菜了)
https://vjudge.net/contest/209626#problem/G
↓
题意:给n行数据,如果是1就塞进去,2就拿出来,判断是队列还是优先队列还是栈,都不是就输出impossible,不确定就输出not sure.
思路:STL大法↓
#include<cstdio>
#include<stack>
#include<queue>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int is_stack,is_queue,is_priority_queue;//标记
queue<int>q;
priority_queue<int>pq;
stack<int>st;
is_stack=1,is_queue=1,is_priority_queue=1;
int flag=0,temp1,temp2;
while(n--){
scanf("%d %d",&temp1,&temp2);
if(temp1==1)
{
q.push(temp2);
pq.push(temp2);
st.push(temp2);
}
else
{
if(!q.empty())
{
if(q.front()!=temp2)
is_queue=0;
q.pop();
}
else
is_queue=0;
if(!pq.empty())
{
if(pq.top()!=temp2)
is_priority_queue=0;
pq.pop();
}
else
is_priority_queue=0;
if(!st.empty())
{
if(st.top()!=temp2)
is_stack=0;
st.pop();
}
else
is_stack=0;
}
}
if(is_queue==1) flag++;
if(is_priority_queue==1) flag++;
if(is_stack==1) flag++;
if(flag==0)
printf("impossible\n");
else if(flag==1)
{
if(is_queue==1) printf("queue\n");
if(is_priority_queue==1) printf("priority queue\n");
if(is_stack==1) printf("stack\n");
}
else
printf("not sure\n");
}
return 0;
}