🏆 全国青少年信息素养大赛

算法应用主题赛 — 星火征途(红色文化)
难度:困难 | 时长:120 分钟 | 满分:100分
题型:5单选(10分) + 5多选(20分) + 4编程(70分)

算法应用主题赛 — 星火征途(红色文化)(困难)
考生:— 第 1 / 14 题
--:--
第 1 题 单选题 2 分
在"红军密码本"问题中,需要尝试所有可能的3位数字密码(000-999)来破解一个加密情报。这种逐一尝试所有可能解的算法思想属于?
第 2 题 单选题 2 分
以下Python代码用于计算"红军长征中某段路的翻山方案数",该函数使用了什么算法思想?
def climb(n):
    if n == 1:
        return 1
    if n == 2:
        return 2
    return climb(n - 1) + climb(n - 2)
print(climb(5))
第 3 题 单选题 2 分
在"革命根据地地形图"中,使用二维列表存储海拔数据。terrain = [[100, 200, 150], [180, 220, 190], [160, 210, 170]],以下哪个代码可以正确获取第2行第3列(220)的值?
第 4 题 单选题 2 分
在"军需物资最优分配"问题中,红军需要将有限的物资分配给多个前线部队。每次选择"当前单位物资收益最高"的部队进行分配,直到物资耗尽。这种策略属于?
第 5 题 单选题 2 分
在"革命根据地联络网"中,需要判断从一个根据地出发能否到达另一个根据地。以下哪种算法最适合解决这类"连通性"问题?
第 6 题 多选题 4 分
关于算法时间复杂度的说法,以下哪些是正确的?
第 7 题 多选题 4 分
关于递推与递归的说法,以下哪些是正确的?
第 8 题 多选题 4 分
在Python中,关于列表排序的说法,以下哪些是正确的?
第 9 题 多选题 4 分
在"红色情报网"系统中,使用了嵌套数据结构。以下Python代码的描述,正确的有哪些?
spy_network = {
    "上海站": {"联络员": ["李明", "王芳"], "密码本": 3},
    "延安站": {"联络员": ["张强", "刘洋", "陈静"], "密码本": 5}
}
第 10 题 多选题 4 分
关于Python异常处理的说法,以下哪些是正确的?
第 11 题 编程操作题 0 分

题目描述:
红军长征途中,需要在一段直线上选择若干休整点。已知直线上有n个可选休整点,每个休整点有一个"安全指数"(正整数)。由于战略需要,任意两个被选中的休整点之间必须至少间隔一个休整点(即不能选择相邻的休整点)。请你编写程序,计算在满足条件的情况下,所选休整点的安全指数之和最大是多少。

输入格式:
第一行一个正整数 n(1 ≤ n ≤ 20),表示可选休整点数量。
第二行 n 个正整数,用空格分隔,表示每个休整点的安全指数。

输出格式:
一个整数,表示最大安全指数之和。
示例输入1:
5
10 5 20 15 30
示例输出1:
60
说明:选择第1、3、5个休整点:10 + 20 + 30 = 60;或第2、5个:5 + 30 = 35;第1、4个:10 + 15 = 25。最大值为60。
示例输入2:
3
10 20 10
示例输出2:
20

示例输入:

示例输出:

第 12 题 编程操作题 0 分

题目描述:
红军情报员需要将一段密码从初始字符串S变为目标字符串T。每次操作可以选择以下之一:
1. 在任意位置插入一个字符
2. 删除任意一个字符
3. 将任意一个字符替换为另一个字符
请你编写程序,计算从S变为T所需的最少操作次数。
提示:本题考察递推/动态规划思想。设 dp[i][j] 表示将S的前i个字符变为T的前j个字符的最少操作数。可以从较小规模的子问题推导。

输入格式:
两行字符串,第一行为初始密码S,第二行为目标密码T。字符串长度均不超过100。

输出格式:
一个整数,表示最少操作次数。
示例输入1:
redstar
redarmy
示例输出1:
4
说明:redstar → redarmy:替换s→a(1次),替换t→m(1次),替换a→y(1次),删除r(1次),共4次。
示例输入2:
army
army
示例输出2:
0

示例输入:

示例输出:

第 13 题 编程操作题 0 分

题目描述:
革命根据地分布在一个n行m列的矩形地图上。地图中每个格子用数字表示:1表示该格子属于根据地,0表示该格子是敌占区。一个"连通区域"是指若干个相邻的根据地格子组成的区域(相邻包括上下左右四个方向)。请你编写程序,找出地图中面积最大的连通区域,输出其面积(格子数量)。
提示:使用深度优先搜索(DFS)或广度优先搜索(BFS)遍历二维网格。

输入格式:
第一行两个正整数 n 和 m(1 ≤ n, m ≤ 50),用空格分隔,表示地图的行数和列数。
接下来 n 行,每行 m 个整数(0或1),用空格分隔,表示地图。

输出格式:
一个整数,表示最大连通区域的面积。如果地图中没有根据地(全部为0),则输出0。
示例输入1:
4 5
1 1 0 0 1
1 0 0 1 1
0 0 1 1 0
1 1 0 0 1
示例输出1:
4
说明:左上角的3个1不连通(中间有0隔开)。中间有一个4个1的连通块(第2行第4-5列和第3行第3-4列),面积最大为4。
示例输入2:
3 3
1 1 1
0 1 0
1 1 1
示例输出2:
7
说明:除了中间(2,2)位置因周围被1包围?不,中间是1,所有1形成一个连通块,面积为7。

示例输入:

示例输出:

第 14 题 编程操作题 0 分

题目描述:
红军指挥部收到一份战役地图,地图是一个n行m列的网格。地图中每个格子有一个数字,表示通过该格子需要消耗的"行军体力值"。红军部队需要从起点(左上角,第1行第1列)行军到终点(右下角,第n行第m列)。部队每次只能向右或向下移动一格。请你编写程序,计算从起点到终点所需的最小体力消耗总和。
提示:本题考察递推/动态规划思想。定义 dp[i][j] 为从起点到达位置 (i, j) 的最小体力消耗。则:
dp[i][j] = grid[i][j] + min(dp[i-1][j], dp[i][j-1])(考虑从上方或左方过来)。

输入格式:
第一行两个正整数 n 和 m(1 ≤ n, m ≤ 100),用空格分隔。
接下来 n 行,每行 m 个非负整数,用空格分隔,表示每个格子的体力消耗值。

输出格式:
一个整数,表示从起点到终点的最小体力消耗总和。
示例输入1:
3 4
1 3 5 2
2 1 4 3
4 2 1 5
示例输出1:
12
说明:路径 (1,1)→(2,1)→(2,2)→(3,2)→(3,3)→(3,4),消耗为 1+2+1+2+1+5 = 12。
示例输入2:
2 2
1 2
3 4
示例输出2:
7
说明:路径 (1,1)→(1,2)→(2,2),消耗为 1+2+4 = 7;或 (1,1)→(2,1)→(2,2),消耗为 1+3+4 = 8。最小值为7。

示例输入:

示例输出: