题目描述
有家动物收容所只收留猫和狗,但有特殊的收养规则,收养人有两种收养方式,第一种为直接收养所有动物中最早进入收容所的,第二种为选择收养的动物类型(猫或狗),并收养该种动物中最早进入收容所的。
输入描述
给定一个操作序列代表所有事件。若第一个元素为 1 ,则代表有动物进入收容所,第二个元素为动物的编号,正数代表狗,负数代表猫;若第一个元素为 2 ,则代表有人收养动物,第二个元素若为 0 ,则采取第一种收养方式,若为 1 ,则指定收养狗,若为 -1 则指定收养猫。
输出描述
请按顺序返回收养的序列。若出现不合法的操作,即没有可以符合领养要求的动物,则将这次领养操作忽略。
样例输入
1 1
1 -1
2 0
2 -1
样例输出
1 -1
#include <iostream>
#include <queue>
using namespace std;
struct animal{
int number;
int order;
animal(int n,int o){
number = n;
order = o;
}
};
queue<animal> dogs;
queue<animal> cats;
int main(){
int order = 0;
int m,t;
while(cin>>m>>t){
if(m == 1){
if(t > 0){
dogs.push(animal(t,order++));
}
else{
cats.push(animal(t,order++));
}
}
else if(m==0){
if(t == 0 && !dogs.empty() && !cats.empty()){
if(dogs.front().order < cats.front().order){
cout<<dogs.front().number;
dogs.pop();
}
else{
cout<<cats.front().number;
cats.pop();
}
}
else if(t == 0 && !dogs.empty() && cats.empty()){
cout<<dogs.front().number;
dogs.pop();
}
else if(t == 0 && dogs.empty() && !cats.empty()){
cout<<cats.front().number;
cats.pop();
}
else if(t == 1 && !dogs.empty()){
cout<<dogs.front().number;
dogs.pop();
}
else if(t == -1 && !cats.empty()){
cout<<cats.front().number;
cats.pop();
}
}
else{
continue;
}
}
return 0;
}
好像看到我同学了,我在vs上测试都没事,一到oj上就只得10分。。
else if(m==0)换成else if(m==2)就行了 m只有1,2两类