蓝桥杯历届真题 #分布式队列 (Java,C++)

devtools/2025/1/12 11:39:59/

文章目录

  • 题目解读
  • [蓝桥杯 2024 省 Java B] 分布式队列
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
  • 思路
  • 完整代码


题目解读

题目链接

[蓝桥杯 2024 省 Java B] 分布式队列

题目描述

小蓝最近学习了一种神奇的队列:分布式队列。简单来说,分布式队列包含 N N N 个节点(编号为 0 0 0 N − 1 N−1 N1,其中 0 0 0 号为主节点),其中只有一个主节点,其余为副节点。主、副节点中都各自维护着一个队列,当往分布式队列中添加元素时都是由主节点完成的(每次都会添加元素到队列尾部);副节点只负责同步主节点中的队列。可以认为主/副节点中的队列是一个长度无限的一维数组,下标为 0 , 1 , 2 , 3 , … 0,1,2,3,\dots 0,1,2,3,,同时副节点中的元素的同步顺序和主节点中的元素添加顺序保持一致。

由于副本的同步速度各异,因此为了保障数据的一致性,元素添加到主节点后,需要同步到所有的副节点后,才具有可见性。

给出一个分布式队列的运行状态,所有的操作都按输入顺序执行。你需要回答在某个时刻,队列中有多少个元素具有可见性。

输入格式

第一行包含一个整数 N N N,表示节点个数。

接下来包含多行输入,每一行包含一个操作,操作类型共有以下三个:add、sync 和 query,各自的输入格式如下:

  1. add element:表示这是一个添加操作,将元素 e l e m e n t element element 添加到队列中;

  2. sync follower_id:表示这是一个同步操作, f o l l o w e r _ i d follower\_id follower_id 号副节点会从主节点中同步下一个自己缺失的元素;

  3. query:查询操作,询问当前分布式队列中有多少个元素具有可见性。

输出格式

对于每一个 query 操作,输出一行,包含一个整数表示答案。

样例 #1

样例输入 #1

3
add 1
add 2
query
add 1
sync 1
sync 1
sync 2
query
sync 1
query
sync 2
sync 2
sync 1
query

样例输出 #1

0
1
1
3

提示

【样例说明】

执行到第一个 query 时,队列内容如下:

  • 节点 0 0 0 [ 1 , 2 ] [1,2] [1,2]
  • 节点 1 1 1 [ ] [] []
  • 节点 2 2 2 [ ] [] []

两个副节点中都无元素,因此答案为 0 0 0

执行到第二个 query 时,队列内容如下:

  • 节点 0 0 0 [ 1 , 2 , 1 ] [1,2,1] [1,2,1]
  • 节点 1 1 1 [ 1 , 2 ] [1,2] [1,2]
  • 节点 2 2 2 [ 1 ] [1] [1]

只有下标为 0 0 0 的元素被所有节点同步,因此答案为 1 1 1

执行到第三个 query 时,队列内容如下:

  • 节点 0 0 0 [ 1 , 2 , 1 ] [1,2,1] [1,2,1]
  • 节点 1 1 1 [ 1 , 2 , 1 ] [1,2,1] [1,2,1]
  • 节点 2 2 2 [ 1 ] [1] [1]

只有下标为 0 0 0 的元素被所有节点同步,因此答案为 1 1 1

执行到第四个 query 时,队列内容如下:

  • 节点 0 0 0 [ 1 , 2 , 1 ] [1,2,1] [1,2,1]
  • 节点 1 1 1 [ 1 , 2 , 1 ] [1,2,1] [1,2,1]
  • 节点 2 2 2 [ 1 , 2 , 1 ] [1,2,1] [1,2,1]

三个元素都被所有节点同步,因此答案为 3 3 3

【评测用例规模与约定】

设输入的操作数为 q q q

对于 30 % 30\% 30% 的评测用例: 1 ≤ q ≤ 100 1\leq q \leq 100 1q100

对于 100 % 100\% 100% 的评测用例: 1 ≤ q ≤ 2000 1\leq q\leq 2000 1q2000 1 ≤ N ≤ 10 1\leq N\leq 10 1N10 1 ≤ f o l l o w e r _ i d < N 1\leq follower\_id<N 1follower_id<N 0 ≤ e l e m e n t ≤ 1 0 5 0\leq element\leq10^5 0element105

数据保证执行同步操作时, f o l l o w e r _ i d follower\_id follower_id 号副节点一定缺失元素

思路

由于最多有10个结点,可以采用暴力的方法
使用数组进行模拟
数组的下标代表第几个队列
数组的大小代表当前队列有几个元素
由于同步元素是同步主队列的下一个元素,因此我们不需要关心具体的元素值,只需要关心有几个元素即可
如果是add操作,我们只需要让其指定的队列元素+1即可,注意:要注意同步的个数不能超过主队列元素个数
查询的时候遍历每个队列,其最小的值就是可见的元素数量

完整代码

#include<bits/stdc++.h>using namespace std;const int N = 15;int cnt[N];int n;int check(){int res=2000;for(int i=1; i<n; i++){res=min(cnt[i],res);}return res;
}int main(){cin>>n;string op;int num;while(cin>>op){//主队列用0号结点if(op=="add"){cin>>num;cnt[0]++;}else if(op=="sync"){cin>>num;if(cnt[num]<cnt[0])cnt[num]++;}else{cout<<check()<<endl;}}return 0;
}
java">import java.util.Scanner;class Main{static int N =15;static int cnt[] = new int[N];static Scanner sc = new Scanner(System.in);static int n =sc.nextInt();public static void main(String[] args) {String op;int num;while(sc.hasNext()){op=sc.next();if(op.equals("add")){num=sc.nextInt();cnt[0]++;}else if(op.equals("sync")){num=sc.nextInt();if(cnt[num]<cnt[0])cnt[num]++;}else{System.out.println(check());}}}static int check(){int res=2000;for(int i=1; i<n; i++){res=Math.min(cnt[i],res);}return res;}
}

🌻编写本篇文章目的是笔者想以输出的形式进行学习,顺便记录学习点滴🌻

🌹 如果本篇文章对你有帮助的话那就点个赞吧👍🌹

😇 本篇文章可能存在多处不足,如有修改意见,可以私信或者评论我哦 😇


在这里插入图片描述


http://www.ppmy.cn/devtools/149534.html

相关文章

阿里云人工智能平台图像视频特征提取

引言 在人工智能和计算机视觉领域&#xff0c;特征提取是图像与视频分析的核心环节&#xff0c;它关乎后续任务的准确性和效率。借助先进的特征提取技术&#xff0c;我们可以从海量的图像与视频数据中挖掘出有价值的信息&#xff0c;为图像分类、目标检测、视频推荐等应用场景…

RabbitMQ解决消息积压的方法

目录 减少发送mq的消息体内容 增加消费者数量 批量消费消息 临时队列转移 监控和预警机制 分阶段实施 最后还有一个方法就是开启队列的懒加载 这篇文章总结一下自己知道的解决消息积压得方法。 减少发送mq的消息体内容 像我们没有必要知道一个的中间状态&#xff0c;只需…

谷歌Google、紫鸟浏览器插件开发

对于跨境电商行业的IT部门来说&#xff0c;经常需要获取各种店铺相关数据&#xff0c;但是仅靠官方提供的接口来获取数据远远不够&#xff0c;这个时候我们就需要插件或者RPA的方式来获取数据。 以下是关于自研紫鸟插件的简单demo&#xff0c;紫鸟浏览器使用的是火狐和谷歌的插…

【人工智能】自然语言生成的前沿探索:利用GPT-2和BERT实现自动文本生成与完形填空

自然语言生成&#xff08;Natural Language Generation, NLG&#xff09;是人工智能领域的重要研究方向&#xff0c;旨在通过计算机系统自动生成连贯、符合语法和语义的自然语言文本。近年来&#xff0c;预训练语言模型如GPT-2和BERT在NLG任务中取得了显著的成果。本文深入探讨…

Go 中的单引号 (‘)、双引号 (“) 和反引号 (`)

在 Go 中&#xff0c;单引号 ()、双引号 (") 和反引号 () 都有不同的用途和含义&#xff0c;具体如下&#xff1a; 1. 单引号 () 单引号用于表示 字符字面量&#xff08;单个字符&#xff09;。在 Go 中&#xff0c;字符是一个单独的 Unicode 字符&#xff0c;并且它的类…

【Spring Boot 应用开发】-04 自动配置-数据源

深入讲解 Spring Boot 自动配置中的数据源配置 为了更好地理解 Spring Boot 中的自动配置机制&#xff0c;我们以数据源配置机制为例&#xff0c;按照以下顺序进行讲解&#xff1a; 不使用任何框架来连接数据源的方式使用 Spring MVC 连接数据源的方式使用 Spring Boot 自动配…

深度求索的新突破——DeepSeek-V3

在人工智能领域不断发展的浪潮中&#xff0c;DeepSeek-V3的出现犹如一颗璀璨的新星&#xff0c;引起了广泛的关注和热议 DeepSeek-V3是由杭州深度求索人工智能基础技术研究有限公司于2024年12月26日发布的混合专家&#xff08;MoE&#xff09;语言模型 官网&#xff1a;https…

2025新春烟花代码(二)HTML5实现孔明灯和烟花效果

效果展示 源代码 <!DOCTYPE html> <html lang"en"> <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js?45f95f1bfde85c7777c3d1157e8c2d34";var …