猫狗收容所
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/597277ca4ea15be13714b259f1a0af78.png#pic_center)
使用两个队列,且队列元素为带有顺序的结构体。
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5bb551468713556d493908fe561c3fcc.png#pic_center)
参考代码:
#include<cstdio>
#include<queue>
using namespace std;
struct animal
{
int number;
int order;
animal(int n,int o):number(n),order(o){}
};
int main()
{
queue<animal> cats,dogs;
int n,m,t,o=0;
scanf("%d",&n);
while(n--)
{
scanf("%d%d",&m,&t);
if(m==1)
{
if(t>0)
dogs.push(animal(t,o++));
if(t<0)
cats.push(animal(t,o++));
}
if(m==2)
{
if(t==0)
{
if(!dogs.empty()&&!cats.empty())
{
if(dogs.front().order<cats.front().order)
{
printf("%d ",dogs.front().number);
dogs.pop();
}
else
{
printf("%d ",cats.front().number);
cats.pop();
}
}
if(!dogs.empty()&&cats.empty())
{
printf("%d ",dogs.front().number);
dogs.pop();
}
if(dogs.empty()&&!cats.empty())
{
printf("%d ",cats.front().number);
cats.pop();
}
}
if(t==1&&!dogs.empty())
{
printf("%d ",dogs.front().number);
dogs.pop();
}
if(t==-1&&!cats.empty())
{
printf("%d ",cats.front().number);
cats.pop();
}
}
}
return 0;
}