第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组

第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
第十六届蓝桥杯大赛软件赛决赛
Python 大学 A 组
【选手须知】
考试开始后,选手首先下载题目,并使用考场现场公布的解压密码解压试
题。
考试时间为 4 小时。考试期间选手可浏览自己已经提交的答案,被浏览的
答案允许拷贝。时间截止后,将无法继续提交或浏览答案。
对同一题目,选手可多次提交答案,以最后一次提交的答案为准。
选手必须通过浏览器方式提交自己的答案。选手在其它位置的作答或其它
方式提交的答案无效。
试题包含"结果填空"和"程序设计"两种题型。
结果填空题:要求选手根据题目描述直接填写结果。求解方式不限。不要
求源代码。把结果填空的答案直接通过网页提交即可,不要书写多余的内容。
程序设计题:要求选手设计的程序对于给定的输入能给出正确的输出结果。
考生的程序只有能运行出正确结果才有机会得分。
注意:在评卷时使用的输入数据与试卷中给出的示例数据可能是不同的。
选手的程序必须是通用的,不能只对试卷中给定的数据有效。
所有源码必须在同一文件中。调试通过后,拷贝提交。
对于编程题目,不能使用诸如绘图、硬件操作或与操作系统相关的 API。
注意: 所有依赖的模块(如 math)必须明确地在源文件中 import。只能
使用 python 自带的模块,使用 pip 等安装的扩展模块无法使用。
所有源码必须在同一文件中。调试通过后,拷贝提交。
第十六届蓝桥杯大赛软件赛决赛
1第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
试题 **A:**最大周长
本题总分:5 分
【问题描述】
已知一个长方形的面积为 2025,且其长和宽均为正整数。现在,请你计算
这个长方形可能的最大周长是多少。
【答案提交】
这是一道结果填空题,你只需要算出结果后提交即可。本题的结果为一个
整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
试题 A: 最大周长
2第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
试题 **B:**特殊整数对的数量
本题总分:5 分
【问题描述】
我们称一对正整数 (a, b) 是 "特别互素对",如果满足以下条件:

  1. 1 ≤ a< b≤ 106 。
  2. ab互素,即 ab的最大公约数为 1 。
  3. a+ b是 2025 的倍数。
    请计算一共有多少对 (a, b) 是 "特别互素对"。
    【答案提交】
    这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
    个数字,在提交答案时只填写这个数字,填写多余的内容将无法得分。
    试题 B: 特殊整数对的数量
    3第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    试题 C:铺设能源管道
    时间限制: 10.0s
    内存限制: 512.0MB
    本题总分:10 分
    【问题描述】
    能源公司正着手建立新的基地。为了确保基地的能源供应,公司计划铺设
    一条长度至少为 n公里的能源管道。铺设管道的成本并非简单地与管道长度成
    正比,而是由管道长度的各位数字之和决定。例如,铺设 123 公里的管道,实
    际成本为 1 + 2 + 3 = 6 。
    为了尽可能降低成本,公司希望找到一个长度为 m公里的铺设方案,使得
    m不小于 n,并且 m的数位和最小。如果存在多个满足条件的 m,则选择数值
    最小的方案,以确保在成本相同的情况下,尽可能减少资源浪费。
    现在,请你帮助能源公司计算出最优的管道铺设长度 m
    【输入格式】
    输入一行包含一个整数 n,表示需要铺设的最低管道长度。
    【输出格式】
    输出一行包含一个整数 m,表示最优的管道铺设长度。
    【样例输入】
    9
    【样例输出】
    10
    【评测用例规模与约定】
    对于 30% 的评测用例,1 ≤ n≤ 100。
    对于所有的评测用例,1 ≤ n≤ 109。
    试题 C: 铺设能源管道
    4第十六届蓝桥杯大赛软件赛决赛Python大学A组
    试题 D:倒排索引
    时间限制: 10.0s
    内存限制: 512.0MB
    本题总分:10 分
    【问题描述】
    在信息检索系统中,倒排索引是一种常用的数据结构,用于快速查找包含
    特定词语的文档集合。为了增强搜索的灵活性,我们引入了 N-Gram 分词算法,
    参数 *min*, *max*,表示分别按照长度 minmin+ 1、· · · 、max对单词进行滑动窗
    口截取。例如对于 3, 5 的 N-Gram,会将单词 lanqb 分割为 lan, anq, nqb, lanq, anqb, lanqb 的索引序列,如果文档长度小于 min,那么索引序列只包
    含文档本身。
    给定 n个文档,对于第 i个文档 *d
    i
    ,利用上述的 N-Gram 算法为其生成一
    组索引序列 *L
    i
    。对于查询词 q,也对其应用 N-Gram 为其生成一个索引序列 P
    ,如果序列 P中的某个单词出现在序列 *L
    i中,那么就认为查询词和文档 d**i
    配成功。
    请统计查询词 q能与多少个文档匹配成功。
    【输入格式】
    输入的第一行包含三个正整数 nminmax,相邻整数之间使用一个空
    格分隔。
    接下来 n行,每行包含一个字符串,其中第 i行的字符串表示文档 d**i
    接下来一行包含一个字符串,表示查询词 q
    【输出格式】
    输出一行包含一个整数表示答案。
    【样例输入】
    3 3 4
    angel
    试题D: 倒排索引
    5第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    ac
    angle
    lang
    【样例输出】
    2
    【样例说明】
    文档分词结果如下:
    angel:ang, nge, gel, ange, ngel
    ac:ac
    angle:ang, ngl, gle, angl, ngle
    查询词分词结果如下:
    lang:lan, ang, lang
    angel 和 angle 的分词中都包含 ang ,所以答案为 2。
    【评测用例规模与约定】
    设 |s| 表示字符串 s的长度。
    对于 50% 的评测用例,1 ≤ n≤ 100;
    对于所有评测用例,1 ≤ n≤ 103,1 ≤ minmax≤ 20,1 ≤ |d**i|, |q| ≤ 20 ,d**i
    q都只包含小写英文字母。
    试题 D: 倒排索引
    6第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    试题 E:上升序列构造
    时间限制: 10.0s
    内存限制: 512.0MB
    本题总分:15 分
    【问题描述】
    小蓝手里有一个长度为 n的十进制正整数序列 (a1, a2, · · · , *a
    n
    ),他希望修改
    这个序列中的一些数使其变为一个上升序列,即满足对于所有的 i,2 ≤ in
    都有 *a
    *i
    −1 < a**i。他只能通过在这些正整数的十进制表示中增加数字 0 来构造这
    个上升序列,他想知道最少增加多少个 0 可以满足条件。
    【输入格式】
    输入的第一行包含一个正整数 n
    第二行包含 n个正整数 a1, a2, · · · , a**n,相邻整数之间使用一个空格分隔。
    【输出格式】
    输出一行包含一个整数表示答案。
    【样例输入】
    6
    527559 483873 913413 181072 822487 853172
    【样例输出】
    8
    【样例说明】
    其中一种方案,更改后的序列为 (527559, 4083873, 9013413, 10081072,
    80022487, 85003172) ,共增加 8 个 0 。
    【评测用例规模与约定】
    对于 20% 的评测用例,1 ≤ n≤ 10 ;
    试题 E: 上升序列构造
    7第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    对于所有评测用例,1 ≤ n≤ 5000,1 ≤ a**i≤ 106。增加 0 之后允许超过 106。
    试题 E: 上升序列构造
    8第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    试题 F:哨兵
    时间限制: 10.0s
    内存限制: 512.0MB
    本题总分:15 分
    【问题描述】
    小蓝是一位国王,他的王国里有 n座城市,通过 n− 1 条路来连通。他想在
    城市中部署三组哨兵 ABC,每组哨兵部署在一个城市里面,一个城市可
    以部署多组哨兵。其中 AB的距离需要和 AC的距离相同。小蓝想知道
    BC的距离最大是多少。
    【输入格式】
    输入的第一行包含一个正整数 n
    接下来 n− 1 行,每行包含两个正整数 *u
    i
    , *v
    i*,用一个空格分隔,表示城市
    *u
    i*和城市 *vi*之间有一条路。
    【输出格式】
    输出一行包含一个整数表示答案。
    【样例输入】
    8
    1 2
    1 3
    1 4
    4 5
    4 6
    6 7
    7 8
    【样例输出】
    4
    试题 F: 哨兵
    9第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    【样例说明】
    其中一种方案:A部署在 5 ,B部署在 3 ,C部署在 7 。
    【评测用例规模与约定】
    对于 20% 的评测用例,1 ≤ n≤ 500 ;
    对于所有评测用例,1 ≤ n≤ 5000 ,1 ≤ *u
    i*, *vi*≤ n
    试题 F: 哨兵
    10第十六届蓝桥杯大赛软件赛决赛Python大学A组
    试题 G:巡逻
    时间限制: 10.0s
    内存限制: 512.0MB
    本题总分:20 分
    【问题描述】
    边境森林中分布着若干重要的哨站,所有哨站之间由隐秘小径相连,形成
    一张天然的巡逻网络。这张网络的结构恰好是一棵树。为了防止敌人渗透,小
    蓝每天需要执行固定长度为 k的巡逻任务。每次巡逻从一个哨站出发,经过不
    重复地恰好 k条道路,最终到达另一个哨站。每条道路都有一定的危险值,巡
    逻路径上危险值的和代表该次巡逻时的风险。两次巡逻路径不相同当且仅当它
    们的起点不同或终点不同。
    现在指挥官希望知道,所有可能的长度为 k的巡逻路线的风险之和是多少?
    【输入格式】
    输入的第一行包含两个正整数 n, k,用一个空格分隔。
    接下来 n− 1 行,每行包含三个正整数 *u
    i
    , *v
    i*,w**i,相邻整数之间使用一个空
    格分隔。表示结点 u**i和结点 v**i之间有一条危险值为 w**i边。
    【输出格式】
    输出一行包含一个整数表示答案。
    【样例输入】
    7 2
    1 2 3
    2 4 5
    1 3 7
    3 5 3
    3 6 4
    6 7 2
    试题G: 巡逻
    11第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    【样例输出】
    104
    【样例说明】
    所有可能的路径及其风险值如下:
    1 → 2 → 4 : 8
    2 → 1 → 3 : 10
    1 → 3 → 5 : 10
    1 → 3 → 6 : 11
    5 → 3 → 6 : 7
    3 → 6 → 7 : 6
    以上路径反过来也是合法的,所以总共有 14 条不同的路径,风险之和为
    104。
    【评测用例规模与约定】
    对于 40% 的评测用例,1 ≤ n≤ 500 ;
    对于所有评测用例,1 ≤ n≤ 5000 ,1 ≤ kn,1 ≤ u**i, v**in,1 ≤ w**i≤ 106。
    试题 G: 巡逻
    12第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    试题 H:网络流量监控
    时间限制: 10.0s
    内存限制: 512.0MB
    本题总分:20 分
    【问题描述】
    网络安全团队需要开发一个系统来监控和检测恶意网络流量。他们收集了
    一系列已知的恶意请求路径模式,每个模式都有一个对应的风险等级。你的任
    务是实现一个算法,检测给定的网络请求路径是否匹配这些模式,并返回匹配
    模式中最高的风险等级。下面是恶意请求路径的相关描述:
    路径格式
    • 路径由斜杠(/)分隔的若干段组成,如 /api/users/profile 。
    • 路径总是以斜杠(/)开头。
    • 路径中的每一段可以是由小写英文字母和数字组成的非空字符串。当路径
    为路径模式时,路径中的一段还可以是通配符 * 或 ** 。
    通配符规则
    • 通配符包括单通配符(*)和双通配符(**),只能是路径模式中的完整
    一段。一个路径中最多有一段通配符,不能出现两个单通配符,不能出现
    两个双通配符,也不能同时出现单通配符和双通配符。
    • 单通配符(*)用于匹配路径中的任意一段。
    例如:/api/*/delete 可以匹配 /api/users/delete 或
    /api/files/delete,但不能匹配 /api/admin/users/delete 。
    • 双通配符(**)用于匹配路径中的零段或连续多段。
    例如:/api/admin/** 可以匹配 /api/admin、/api/admin/users
    或 /api/admin/users/profile 。
    试题 H: 网络流量监控
    13第十六届蓝桥杯大赛软件赛决赛Python大学A组
    例如:/static/**/execute 可以匹配 /static/execute 、
    /static/js/execute 或 /static/css/js/execute 。
    风险评估
    • 每个恶意路径模式都有一个风险等级。
    • 如果一个请求同时匹配多个模式,返回风险等级最高的。
    • 如果不匹配任何模式,返回 SAFE。
    你需要实现一个算法,给定恶意请求路径模式集合和一系列网络请求路径,
    判断每个网络请求是否触发警报,并且返回触发的最高风险等级。
    【输入格式】
    输入的第一行包含一个正整数 n,表示恶意路径模式的数量。
    接下来 n行,每行包含一个整数 *l
    i*和一个字符串 *p
    i*,用一个空格分隔,表
    示一个恶意请求路径模式,l**i表示风险等级,p**i表示路径模式。
    接下来一行包含一个整数 m,表示要检测的网络请求数量。
    接下来 m行,每行包含一个字符串 q**i,表示一个网络请求路径。
    【输出格式】
    对于每个网络请求路径,输出一行,包含检测结果。如果触发警报,输出
    ALERT: 风险等级;如果没有触发警报,输出 SAFE。
    【样例输入】
    5
    80 /api/admin/**
    60 /api/*/delete
    75 /*/config/system
    90 /api/users/*/password
    50 /static/**/execute
    8
    试题H: 网络流量监控
    14第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    /api/users/profile
    /api/admin/users
    /api/config/delete
    /dev/config/system
    /static/js/execute
    /api/users/123/password
    /static/css/js/execute
    /api/admin
    【样例输出】
    SAFE
    ALERT: 80
    ALERT: 60
    ALERT: 75
    ALERT: 50
    ALERT: 90
    ALERT: 50
    ALERT: 80
    【样例说明】
    1./api/users/profile - 不匹配任何模式,所以是 SAFE 。
    2./api/admin/users - 匹配 /api/admin/**,风险等级 80 。
    3./api/config/delete - 匹配 /api/*/delete,其中 * 匹配 config,
    风险等级 60 。
    4./dev/config/system - 匹配 /*/config/system,其中 * 匹配 dev,
    风险等级 75 。
    5./static/js/execute - 匹配 /static/**/execute,其中 ** 匹配
    js,风险等级 50 。
    6./api/users/123/password - 匹配 /api/users/*/password,其
    中 * 匹配 123,风险等级 90 。
    7./static/css/js/execute - 匹配 /static/**/execute,其中 **
    试题 H: 网络流量监控
    15第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    匹配 css/js,风险等级 50 。
    8./api/admin - 匹配 /api/admin/**,其中 ** 匹配空(0 个段),风
    险等级 80 。
    【评测用例规模与约定】
    对于 20% 的评测用例,1 ≤ n≤ 10, 1 ≤ m≤ 10 ;
    对于 40% 的评测用例,1 ≤ n≤ 100, 1 ≤ m≤ 100 ;
    对于 60% 的评测用例,1 ≤ n≤ 1000, 1 ≤ m≤ 1000 ;
    对于所有评测用例,1 ≤ n≤ 10, 000 ,1 ≤ m≤ 1000 ,1 ≤ l**i≤ 50000 ,
    1 ≤ |p**i| ≤ 50 ,1 ≤ |q**i| ≤ 50 。
    试题 H: 网络流量监控
    16第十六届蓝桥杯大赛软件赛决赛Python大学A组
    试题 I:杨辉三角
    时间限制: 10.0s
    内存限制: 512.0MB
    本题总分:25 分
    【问题描述】
    小蓝最近迷上了杨辉三角, 杨辉三角是一个无限向下递增的数字三角形。下
    图展示了杨辉三角的前 11 行:
    我们定义函数 f(i) 表示数字 i在杨辉三角中出现的次数(其中 i≥ 2)。
    现在,给定一个正整数 nn≥ 2),请你完成以下任务:
    • 对于所有满足 2 ≤ xn的整数 x,计算出对应的 f(x);
    • 将所有具有相同 f(x) 值的数字归为一组;
    • 统计并输出每个不同的 f(x) 值出现了多少次。
    【输入格式】
    输入一行包含一个正整数 n
    【输出格式】
    输出若干行。第 i行包含两个整数 *v
    i
    , *c
    i*,用一个空格分隔,表示使得函数
    f(x) = *v
    i*的个数为 *ci*。按照 *vi*从小到大的顺序输出。
    试题I: 杨辉三角
    17第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    【样例输入】
    5
    【样例输出】
    1 1
    2 3
    【样例说明】
    x的取值范围是 2, 5,其中 f(2) = 1, f(3) = f(4) = f(5) = 2,即值为 1
    出现了 1 次,值为 2 出现了 3 次。
    【评测用例规模与约定】
    对于 20% 的评测用例,2 ≤ n≤ 100 ;
    对于 40% 的评测用例,2 ≤ n≤ 1000 ;
    对于 60% 的评测用例,2 ≤ n≤ 10, 000 ;
    对于所有评测用例,2 ≤ n≤ 100, 000 。
    试题 I: 杨辉三角
    18第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    试题 J:心意
    时间限制: 10.0s
    内存限制: 512.0MB
    本题总分:25 分
    【问题描述】
    小蓝有一个序列 a,同时他的朋友小乔有一个序列 b
    我们认为两个序列是和谐的,当且仅当存在某个数 x,使得对于所有的 i
    有 *a
    i
    + x= *b
    i*。
    现在小蓝可以让序列 a旋转,即通过一次参数为 k的旋转可以将序列
    a1, a2, · · · , a**n变为 a1+k, a2+k, · · · , a**n, a1, a2, · · · , a**k
    小蓝希望知道,是否存在这样的旋转操作,能够让序列 ab是和谐的。
    输出共一行,一个自然数 k表示参数为 k的旋转操作能够让 a, b是和谐的,
    如果存在多个这样的 k,请输出最小的 k,如果不存在这样的 k,请输出 −1 。
    【输入格式】
    输入的第一行包含一个正整数 n
    第二行包含 n个正整数 a1, a2, · · · , a**n,相邻整数之间使用一个空格分隔。
    第三行包含 n个正整数 b1, b2, · · · , b**n,相邻整数之间使用一个空格分隔。
    【输出格式】
    输出一行包含一个整数表示答案,如果不存在,请输出整数 -1 。
    【样例输入】
    4
    2 3 4 5
    2 3 4 1
    【样例输出】
    1
    试题 J: 心意
    19第十六届蓝桥杯大赛软件赛决赛 Python 大学 A 组
    【样例说明】
    小蓝可以让序列 a旋转得到 3 4 5 2 ,根据和谐序列的定义,令 x= −1 ,
    那么此时 a, b就是和谐的。
    【评测用例规模与约定】
    对于 50% 的评测用例,n≤ 3000 ;
    对于 80% 的评测用例,对于任意 i, ja**i, a**j
    对于所有评测用例,1 ≤ n≤ 5 × 105 ,1 ≤ a**i, b**i≤ 109 。
    试题 J: 心意
    20
相关推荐
-FxYaM-1 小时前
图吧工具箱与自动化运维
python
aqi001 小时前
15天学会AI应用开发(四)根据Token长度截断历史对话
人工智能·python·大模型·ai编程·ai应用
*neverGiveUp*1 小时前
初步了解Django框架
开发语言·python·django
luweis1 小时前
企智孪生 ETA (6.3 数字人格 (Digital Persona) 的构建工程、6.4 交互触点:全场景嵌入策略)【杭州联保致新科技有限公司 卢伟舜】
人工智能·程序人生·机器学习·自然语言处理·职场和发展·知识图谱·学习方法
狐言乱雨1 小时前
深入理解KV Cache:大模型推理加速的核心技术
python
罗超驿2 小时前
16.滑动窗口经典例题:最小覆盖子串(LeetCode 76)算法原理剖析
算法·leetcode·职场和发展
chimchim662 小时前
Azure Data Factory (ADF)‌ 之databricks使用
后端·python·flask
ふり2 小时前
测试的“三重境界”:黑盒、白盒、灰盒的对比与实践
网络·python·测试工具·需求分析
开源量化GO2 小时前
多合约期货策略目标持仓怎么更新不容易乱
python·区块链