題目描述
有家動物收容所只收留貓和狗,但有特殊的收養規則,收養人有兩種收養方式,第一種爲直接收養所有動物中最早進入收容所的,第二種爲選擇收養的動物類型(貓或狗),並收養該種動物中最早進入收容所的。
給定一個操作序列int[][2] ope(C++中爲vector<vector<int>>)代表所有事件。若第一個元素爲1,則代表有動物進入收容所,第二個元素爲動物的編號,整數代表狗,負數代表貓;若第一個元素爲2,則代表有人收養動物,第二個元素若爲0,則採取第一種收養方式,若爲1,則指定收養狗,若爲-1則指定收養貓。請按順序返回收養的序列。若出現不合法的操作,即沒有可以符合領養要求的動物,則將這次領養操作忽略。
[[1,1],[1,-1],[2,0],[2,-1]]
返回:[1,-1]
class CatDogAsylum {
public:
vector<int> asylum(vector<vector<int> > ope)
{
vector<int>result;int flag;
int len=ope.size();
for(int i=0;i<len;i++)
{
if(ope[i][0]==2)
{
flag=0;
if(ope[i][1]==0)//按照第一種方式選動物;
{
for(int j=0;j<i&&flag==0;j++)
{
if(ope[j][0]==1)//最早的動物;
{
result.push_back(ope[j][1]);
ope[j][0]=-1;//表示已經選過;
flag=1;
}
}
}
else if (ope[i][1]==1)//取第一個狗;
{
for(int j=0;j<i&&flag==0;j++)
{
if(ope[j][0]==1&&ope[j][1]>=0)
{
result.push_back(ope[j][1]);
ope[j][0]=-1;//表示已經選過;
flag=1;
}
}
}
else//取第一個貓;
{
for(int j=0;j<i&&flag==0;j++)
{
if(ope[j][0]==1&&ope[j][1]<0)
{
result.push_back(ope[j][1]);
ope[j][0]=-1;//表示已經選過;
flag=1;
}
}
}
}
}
return result;
}
};