这个是题目代码如下:
//第一个数字为所有事件
//第一个元素为1,代表进入收容所,第二个元素为动物的编号,正数代表狗,负数代表猫
//第一个元素为2,代表收养,第二个元素为0,代表所有与动物的先后,第二个数字为1,代表收养狗,若为-1
//代表是收养猫 。 不合法的直接忽略 , 输出动物的的编号 , 以空格间隔;
#include<cstdio>
#include<queue>
using namespace std;
struct Animals{
int num;//编号
int seq;//序号
};
int main(){
int seq = 0;
int n;//问题的规模
scanf("%d",&n);
queue<Animals> dogQue;
queue<Animals> catQue;
for(int i = 0 ; i < n ; ++ i ){
int x , y;
scanf("%d%d",&x,&y);
if(1 == x){//动物进入收容所
if( y > 0){
Animals dog;
dog.num = y;
dog.seq = seq ;
++seq;
dogQue.push(dog);
}
else{
Animals cat;
cat.num = y;
cat.seq = seq ;
++seq;
catQue.push(cat);
}
}
else{//动物出收容所
if( 0 == y ){//所有动物先后
if(catQue.empty() && dogQue.empty()){//猫狗都空 忽略
continue;
}
else if (catQue.empty() && !dogQue.empty()
|| !dogQue.empty() && !catQue.empty() && dogQue.front().seq < catQue.front().seq){
//所有动物先后 ,零养狗的情况 1.猫空 狗不空 2.猫狗都不空但是 狗的seq<猫的seq
printf("%d ",dogQue.front().num);
dogQue.pop();
}
else{
printf("%d ",catQue.front().num);
catQue.pop();
}
}
else if(1 == y){//领养狗
if(dogQue.empty()){
continue;
}
else{
printf("%d ",dogQue.front().num);
dogQue.pop();
}
}
else{//领养猫
if(catQue.empty()){
continue;
}
else{
printf("%d ",catQue.front().num);
catQue.pop();
}
}
}
}
}