2025-4-2 蓝桥杯刷题情况(分布式队列)

1.题目描述

小蓝最近学习了一种神奇的队列:分布式队列。简单来说,分布式队列包含 N 个节点(编号为0至N-1,其中0号为主节点),其中只有一个主节点,其余为副节点。
主/副节点中都各自维护着一个队列,当往分布式队列中添加元素时都是由主节点完成的(每次都会添加元素到主节点对应的队列的尾部);副节点只负责同步主节点中的队列。可以认为主/副节点中的队列是一个长度无限的一维数组,下标为 0,1,2,3...,同时副节点中的元素的同步顺序和主节点中的元素添加顺序保持一致。
由于副本的同步速度各异,因此为了保障数据的一致性,元素添加到主节点后,需要同步到所有的副节点后,才具有可见性。
给出一个分布式队列的运行状态,所有的操作都按输入顺序执行。你需要回答在某个时刻,队列中有多少个元素具有可见性。

2.输入格式

第一行包含一个整数 N,表示节点个数。
接下来包含多行输入,每一行包含一个操作,操作类型共有以下三种:add、sync和query,各自的输入格式如下:
1.add element:表示这是一个添加操作,将元素 element 添加到队列中;
2.sync followerid:表示这是一个同步操作,followerid号副节点会从主节点中同步下一个自己缺失的元素:
3.query:查询操作,询问当前分布式队列中有多少个元素具有可见性。

3.代码

4.思路

  1. 输入处理:程序首先读取节点的数量 n,并创建一个长度为 n 的数组 count 来记录每个节点队列的元素数量,其中 count[0] 表示主节点队列的元素数量。
  2. 操作处理:使用 while 循环持续读取操作类型和相关参数,根据操作类型执行不同的操作:
    • add 操作:将主节点队列的元素数量加 1。
    • sync 操作:将指定副节点的队列元素数量更新为当前数量加 1 和主节点队列元素数量中的较小值。
    • 其他操作:找出所有队列中都有的元素数量并输出。
  3. 输出结果:对于除 add 和 sync 之外的操作,程序会计算并输出所有队列中都有的元素数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值