王道机试指南 例题5.3 猫狗收容所

题目:

代码:

#include <iostream>
#include <queue>
using namespace std;

int main(){
    int n;
    cin>>n;
    queue<int> a,at;//a记录狗编号,at记录相应狗的入队时间
    queue<int> b,bt;//b记录猫编号,bt记录相应猫的入队时间
    queue<int> out;//out记录领养顺序
    for(int i=0;i<n;i++){
        int n1,n2;
        cin>>n1>>n2;
        if(n1==1 && n2>0){//狗进入收容所
            a.push(n2);
            at.push(i);
        }
        else if(n1==1 && n2<0){//猫进入收容所
            b.push(n2);
            bt.push(i);
        }
        else if(n1==2 && n2==1){//收养狗
            out.push(a.front());
            a.pop();
            at.pop();
        }
        else if(n1==2 && n2==-1){//收养猫
            out.push(b.front());
            b.pop();
            bt.pop();
        }
        else if(n1==2 && n2==0){//收养最先进入收容所的动物
            if(a.empty()==0 && b.empty()==0){//猫狗队列都不空,则比较队头元素的入队时间
                if(at.front()<bt.front()){
                    out.push(a.front());
                    a.pop();
                    at.pop();
                }
                else{
                    out.push(b.front());
                    b.pop();
                    bt.pop();
                }
            }
            else if(a.empty()==0 && b.empty()==1){//狗队列不空,猫队列空
                out.push(a.front());
                a.pop();
                at.pop();
            }
            else if(a.empty()==1 && b.empty()==0){//狗队列空,猫队列不空
                out.push(b.front());
                b.pop();
                bt.pop();
            }
        }

    }

    while(out.empty()==0){//打印out队列中被收养动物的编号
        cout<<out.front()<<" ";
        out.pop();
    }

    return 0;
}

运行结果:

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-23 14:22
点赞 评论 收藏
分享
苍蓝星上艾露:这简历。。。可以试试我写的开源简历优化工具https://github.com/weicanie/prisma-ai
点赞 评论 收藏
分享
评论
7
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务