题目描述
有一家动物收容所只收容猫与狗,且严格遵守先进先出原则。在收养该收容所的动物时,收养人只能收养猫或狗,且收养的那一只动物必须是那种动物中剩下未被收养的最先进入收养所的那一只动物。换而言之,收养人不能自由挑选想收养的对象。
题目保证编号number为非负整数,且每次提供的编号比前一次的编号大。
实现AnimalShelf类:
1. void enqueue(int number, string type):收养所接收编号为number的动物,type为"cat"或"dog"。
2. void dequeueAny(int* number, string* type):收养人接受收养猫或狗,但是收养所给予的动物必须是剩下的动物中最先进入收养所的那一只。将动物编号与动物种类分别放置在number[0]和type[0]里。
3. int dequeueDog():收养人只接受收养狗,收养所给予的狗必须是所有剩下的狗之中最先进入收养所的那一只。
4. int dequeueCat():收养人只接收收养猫,规定同上。
输入
第一行输入t,表示有t个测试样例。
第二行起,首先输入n,表示会执行n个操作,接着输入n个操作。
如果输入的操作是字符串"enqueue",则该操作接下来还会输入一个非负整数number和一个字符串type,type为"cat"或"dog";
如果输入的是字符串"dequeueDog"、"dequeueCat"或"dequeueAny",则该操作不会输入其他内容。
以此类推,共输入t个测试样例。
3
5 enqueue 0 cat enqueue 1 cat dequeueCat dequeueDog dequeueAny
6 enqueue 0 cat enqueue 1 cat enqueue 2 dog dequeueDog dequeueCat dequeueAny
13 dequeueAny dequeueDog dequeueCat enqueue 20 cat dequeueAny enqueue 30 dog dequeueAny enqueue 50 cat enqueue 60 dog dequeueAny enqueue 70 cat dequeueAny dequeueAny
输出
每一行输出在执行"dequeueDog"、"dequeueCat"和"dequeueAny"操作后所获得的动物,输出格式是"[number type]"。
如果无法领养到对应的动物,则输出"[-1 none]"。
注意输出末尾的空格。
[0 cat] [-1 none] [1 cat]
[2 dog] [0 cat] [1 cat]
[-1 none] [-1 none] [-1 none] [20 cat] [30 dog] [50 cat] [60 dog] [70 cat]
提示
0 <= number <= 1000
题目保证每次提供的编号比前一次的编号大。
#include<iostream>
#include <queue>
using namespace std;
class AnimalShelf
{
public:
queue<int> cat;
queue<int> dog;
AnimalShelf() {}
void enqueue()//放入一只动物
{
int order;
string type;
cin >> order >> type;
if (type == "cat")
cat.push(order);
else
dog.push(order);
}
void dequeueAny()//输出任意的动物
{
if (cat.empty() && dog.empty())//都空输出-1
{
cout << "[-1 none] ";
return;
}
if (cat.empty())//无小猫则输出小狗
{
cout << "[" << dog.front()<< " dog] ";
dog.pop();
return;
}
if (dog.empty())//无小狗输出小猫
{
cout << "[" << cat.front() << " cat] ";
cat.pop();
return;
}
if (cat.front() < dog.front())//都有则按编号输出
{
cout << "[" << cat.front() << " cat] ";
cat.pop();
}
else
{
cout << "[" << dog.front() << " dog] ";
dog.pop();
}
}
int dequeueDog()//输出小狗
{
if (dog.empty())
{
cout << "[-1 none] ";
return 0;
}
else
{
cout << "[" << dog.front() << " dog] ";
dog.pop();
return 0;
}
}
int dequeueCat()//输出小猫
{
if (cat.empty())
{
cout << "[-1 none] ";
return 0;
}
else
{
cout << "[" << cat.front() << " cat] ";
cat.pop();
return 0;
}
}
};
int main()
{
int t, n;
string judge;
cin >> t;
while (t--)
{
AnimalShelf a;//创建一个动物所
cin >> n;
while (n--)
{
cin >> judge;
if (judge == "enqueue")
a.enqueue();
if (judge == "dequeueAny")
a.dequeueAny();
if (judge == "dequeueCat")
a.dequeueCat();
if (judge == "dequeueDog")
a.dequeueDog();
}
cout << endl;
}
}