首页 > 其他分享 >【OJ】猫狗队列

【OJ】猫狗队列

时间:2024-03-13 19:32:03浏览次数:23  
标签:elif OJ 队列 self dog cat add def

猫狗队列

思路

用两个队列分别保存猫、狗,用各个的入队计数判断任一出队时选择哪一种,指定类别出队则直接从相应队列出队。

实现Python

输入测试testCatDogQ.txt

65
add dog 29
add cat 9
add dog 40
add dog 38
add cat 32
add dog 20
add cat 45
pollAll
add cat 37
isDogEmpty
add cat 23
isCatEmpty
add dog 1
pollCat
pollDog
add cat 22
add dog 39
pollCat
add cat 31
add cat 2
add dog 12
add cat 35
add dog 30
add dog 27
add dog 14
add cat 18
isDogEmpty
add cat 3
add dog 21
add dog 16
isCatEmpty
add cat 13
isDogEmpty
add dog 46
add dog 44
isCatEmpty
add dog 10
isDogEmpty
isEmpty
add dog 42
isDogEmpty
pollAll
isCatEmpty
add dog 4
add dog 6
add dog 15
isDogEmpty
pollAll
isEmpty
add cat 26
add dog 17
add cat 5
add dog 41
add cat 7
add dog 28
add dog 8
add dog 11
add dog 24
add dog 34
isEmpty
add cat 25
add dog 19
add dog 33
add dog 36
add cat 43
#!/usr/bin/python3


class Pet:
    def __init__(self, type, id=0, t=0):
        self.type = type
        self.id = id
        self.t = t

    def __str__(self) -> str:
        return "{} {}".format(self.type, self.id)


class PetQueue:
    def __init__(self):
        self.qcat = []
        self.qdog = []
        self.cnt = 0
        self.num = 0

    def add(self, type: str, id):
        self.cnt += 1
        self.num += 1
        if type == "cat":
            self.qcat.append(Pet(type, id, self.cnt))
        elif type == "dog":
            self.qdog.append(Pet(type, id, self.cnt))
        else:
            raise ValueError("Pet Type Unknown")

    # 不分类别地出队1只
    def pollAny(self):
        if len(self.qcat) > 0 and len(self.qdog) > 0:
            tc = self.qcat[0].t
            td = self.qdog[0].t
            if tc < td:
                a = self.qcat.pop(0)
            elif td < tc:
                a = self.qdog.pop(0)
            else:
                raise ValueError("Time Error")
        elif len(self.qdog) > 0:
            a = self.qdog.pop(0)
        elif len(self.qcat) > 0:
            a = self.qcat.pop(0)
        else:
            raise IndexError("Empty Queue Polled")
        print(a)

    def pollAll(self):
        while self.num > 0:
            self.pollAny()
            self.num -= 1

    def pollDog(self):
        while len(self.qdog) > 0:
            print(self.qdog.pop(0))
            self.num -= 1

    def pollCat(self):
        while len(self.qcat) > 0:
            print(self.qcat.pop(0))
            self.num -= 1

    def isCatEmpty(self):
        if len(self.qcat) > 0:
            print("no")
        else:
            print("yes")

    def isDogEmpty(self):
        if len(self.qdog) > 0:
            print("no")
        else:
            print("yes")

    def isEmpty(self):
        if len(self.qcat) == 0 and len(self.qdog) == 0:
            print("yes")
        else:
            print("no")

    def test(self, fn):
        with open(fn, "r") as fp:
            n = int(fp.readline())
            for _ in range(n):
                l = fp.readline().strip("\n").split(" ")
                if l[0] == "add":
                    self.add(l[1], int(l[2]))
                elif l[0] == "pollAll":
                    self.pollAll()
                elif l[0] == "pollDog":
                    self.pollDog()
                elif l[0] == "pollCat":
                    self.pollCat()
                elif l[0] == "isDogEmpty":
                    self.isDogEmpty()
                elif l[0] == "isCatEmpty":
                    self.isCatEmpty()
                elif l[0] == "isEmpty":
                    self.isEmpty()

    def run(self):
        n = int(input())
        for _ in range(n):
            l = input().split(" ")
            if l[0] == "add":
                self.add(l[1], int(l[2]))
            elif l[0] == "pollAll":
                self.pollAll()
            elif l[0] == "pollDog":
                self.pollDog()
            elif l[0] == "pollCat":
                self.pollCat()
            elif l[0] == "isDogEmpty":
                self.isDogEmpty()
            elif l[0] == "isCatEmpty":
                self.isCatEmpty()
            elif l[0] == "isEmpty":
                self.isEmpty()


if __name__ == "__main__":
    a = PetQueue()
    a.test("./testCatDogQ.txt")

标签:elif,OJ,队列,self,dog,cat,add,def
From: https://blog.csdn.net/CSUzhangpeike/article/details/136688537

相关文章

  • 【easy52pojie】一款方便看吾爱论坛帖子的爬虫程序
    【easy52pojie】一款方便看吾爱论坛帖子的爬虫程序众所周知吾爱论坛一页最多显示十来条回帖,且间隔很大,每页的信息密度太低了。在帖子很庞大的情况下,一页一页翻页,着实有点痛苦。故简单敲敲代码,使用requestxpath技术做了一个论坛帖子回复查看器,名称为easy52pojie,运行代码即可导出......
  • 【持续更新】华为 OD 机试 C卷抽中题库清单(全真题库)含考点说明以及在线OJ
    华为OD机考:统一考试C卷+D卷+B卷+A卷2023年11月份,华为官方已经将华为OD机考:OD统一考试(A卷/B卷)切换到OD统一考试(C卷)和OD统一考试(D卷)。目前在考C卷,经过两个月的收集整理,C卷真题已基本整理完毕抽到原题的概率为2/3到3/3,也就是最少抽到两道原题。请注意:大家刷......
  • yii2+rabbitmq实现队列(windows)
    1.安装Erlang官方网站,https://erlang.org/download/otp_versions_tree.html,选择和rabbitmq适配的2.安装RabbitMQ官方网站,windows:https://www.rabbitmq.com/docs/install-windows3.安装下载的Erlang和RabbitMQ 碰到的问题:1.开启rabbitmq服务时dos窗口一闪而逝,看了服务进程......
  • 多重背包详解,二进制优化、单调队列优化
    文章目录零、前言一、多重背包初步1.1问题描述1.2朴素算法二、朴素算法的优化策略2.1二进制优化2.1.1算法思想2.2二进制优化的正确性证明2.3代码实现2.2单调队列优化2.2.1算法思想2.2.2代码实现2.3、总结三、OJ练习3.1P1776宝物筛选3.1.1原题链接3.1.2思路分析3.1.3......
  • redis 延迟队列
    参考:https://blog.csdn.net/weixin_42128977/article/details/126152834https://cloud.tencent.com/developer/article/2310463?areaId=106001场景定时任务,比如任务A和任务B是同条流水线上的,当任务A完成了,一个小时后执行任务B我们打车,在规定时间内,没有车主接单,那么平台就......
  • LCR 183. 望远镜中最高的海拔(双端队列)
    科技馆内有一台虚拟观景望远镜,它可以用来观测特定纬度地区的地形情况。该纬度的海拔数据记于数组 heights ,其中 heights[i] 表示对应位置的海拔高度。请找出并返回望远镜视野范围 limit 内,可以观测到的最高海拔值。示例1:输入:heights=[14,2,27,-5,28,13,39],limit=......
  • Idea Project :一个正确配置 (调整Maven服务器后)
    配置Maven环境(FileSettings)MavenMavenrunnerJavaComplier配置ProjectStructureSDKProjectModuleuploading-image-281165.png......
  • 01-deque类-双端队列-完全解读
    1 deque类的适用场景1.1适用场景deque并非列表的完美替代,一般情况下,它最适用于:1.1 左入右出,或者,右入左出的数据结构。    只通过对其两端数据的操作,实现压入和弹出。比如:简单的堆栈1.2 创建有限长度的数据集,对近期有限事务或类似数据池的追踪记录。比如:日......
  • 灌溉问题——队列的应用
    题目链接:1.灌溉-蓝桥云课(lanqiao.cn)主要知识点在于队列的使用,详细的解释在代码中注释给出队列的特性:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表,先进先出(FirstInFirstOut)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。......
  • QOJ杂题合集
    QOJ杂题合集QOJ#151.NiceLinesQOJ#838.HorribleCyclesQOJ#894.LongestLooseSegmentQOJ#895.Color给定一个有\(n\)个节点的无向完全图\(G\),每条边都被染成了\(m\)种颜色中的一种,颜色编号为\(1\simm\)。我们称一个无向完全图合法,当且仅当对于\(\forallx......