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

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

算法应用主题赛 — 星火征途(红色文化)(困难)
考生:— 第 1 / 14 题
--:--
第 1 题 单选题 2 分
在"红军密码本有序查找"任务中,情报员需要在已排序的1000个密码中快速查找目标密码。每次查找都将搜索范围缩小一半,最多需要查找多少次?
第 2 题 单选题 2 分
以下代码使用冒泡排序对"红军各部队战绩"进行排序。该代码执行后,内层for j循环总共执行了多少次比较?
scores = [85, 92, 78, 95, 88]
n = len(scores)
for i in range(n - 1):
    for j in range(n - 1 - i):
        if scores[j] < scores[j + 1]:
            scores[j], scores[j + 1] = scores[j + 1], scores[j]
第 3 题 单选题 2 分
在"革命情报密文处理"中,需要将一段密文的字符按照"后进先出"的顺序还原。这种操作适合使用哪种数据结构?
第 4 题 单选题 2 分
在"红军行军指令排队处理"中,指挥部发出的指令按照"先发先执行"的顺序处理。这种处理方式符合哪种数据结构的特点?
第 5 题 单选题 2 分
在"敌我阵地形势分析"中,已知一个n×n的网格地图,红军部队在起点,需要找到到达敌军指挥部的最短路径(每次可上下左右移动一格,避开障碍物)。以下哪种算法最适合?
第 6 题 多选题 4 分
在"战役数据分析"系统中,需要对大量数据进行排序。以下关于排序算法的说法,正确的有哪些?
第 7 题 多选题 4 分
在"革命战场地形探索"中,需要在网格地图上搜索目标。关于广度优先搜索(BFS)和深度优先搜索(DFS)的说法,正确的有哪些?
第 8 题 多选题 4 分
在"情报密文处理"中,有时会使用位运算来快速处理数据。以下关于Python位运算的说法,正确的有哪些?
第 9 题 多选题 4 分
在"革命英雄信息表"中,使用二维列表存储数据。关于二维列表遍历的操作方式,以下哪些是正确的?
第 10 题 多选题 4 分
关于贪心算法与动态规划的区别,以下说法正确的有哪些?
第 11 题 编程操作题 0 分

题目描述:
红军情报站将情报按编号从小到大的顺序存储在列表中。现需要快速查找某个情报编号是否存在,以及它在列表中的位置(索引)。请你编写程序,使用二分查找算法在已排序的情报编号列表中查找目标编号。如果找到,输出其位置(索引从0开始);如果未找到,输出"未找到该情报"。
要求:必须使用二分查找算法实现,否则不得分。

输入格式:
第一行一个正整数 n(1 ≤ n ≤ 1000)和一个目标编号 target,用空格分隔。
第二行 n 个严格递增的整数,用空格分隔,表示已排序的情报编号列表。

输出格式:
如果找到,输出"情报编号X位于索引Y"(Y从0开始)。
如果未找到,输出"未找到该情报"。
示例输入1:
6 300
100 150 200 300 450 600
示例输出1:
情报编号300位于索引3
示例输入2:
5 250
100 150 200 300 450
示例输出2:
未找到该情报

示例输入:

示例输出:

第 12 题 编程操作题 0 分

题目描述:
红军运输队需要从仓库中选取若干件物资运往前线。每件物资有固定的重量和价值(战略重要度)。运输队的最大承载重量为W。请你编写程序,计算在不超过载重限制的情况下,能够装载的物资最大总价值是多少。
提示:本题是经典的0-1背包问题,可使用动态规划或枚举法解决。设 dp[i][w] 表示前 i 件物资在载重 w 下的最大价值。

输入格式:
第一行两个整数 n 和 W(1 ≤ n ≤ 20,1 ≤ W ≤ 200),分别表示物资件数和最大载重。
接下来 n 行,每行两个整数:物资重量和价值,用空格分隔。

输出格式:
一个整数,表示最大总价值。
示例输入1:
4 10
2 6
3 8
4 10
5 12
示例输出1:
22
说明:选择第2件(重量3,价值8)、第3件(重量4,价值10)、第4件(重量5,价值12)时总重量=12>10,不行。选择第1件(2,6)、第2件(3,8)、第3件(4,10)时总重量=9≤10,总价值=24,但9+2=11>10。选择第1件和第4件:重量2+5=7≤10,价值6+12=18。选择第2件和第4件:重量3+5=8≤10,价值8+12=20。选择第3件和第4件:重量4+5=9≤10,价值10+12=22。最大为22。
示例输入2:
3 5
2 3
3 4
4 5
示例输出2:
7

示例输入:

示例输出:

第 13 题 编程操作题 0 分

题目描述:
红军截获了一段敌军密码,密码由若干字符组成,但不知道这些字符的排列顺序。情报员需要生成密码中所有字符的所有可能排列,并按字典序输出。请你编写程序,输入一个字符串(所有字符不重复),输出该字符串所有字符的全排列(每个排列占一行),按字典序升序排列。
提示:可以使用递归(回溯法)或 Python 的 itertools.permutations。

输入格式:
一行字符串,长度不超过6,所有字符互不相同。

输出格式:
按字典序升序输出所有排列,每行一个排列。

示例输入:

ABC

示例输出:

ABC
ACB
BAC
BCA
CAB
CBA
第 14 题 编程操作题 0 分

题目描述:
红军需要在敌占区找到一条从起点到终点的最短突破路径。战场地图是一个n行m列的网格,其中0表示可通行的空地,1表示障碍物(不可通行)。起点为左上角(0, 0),终点为右下角(n-1, m-1)。部队每次可以向上下左右四个方向移动一格(不能斜着走,不能穿过障碍物)。请你编写程序,使用广度优先搜索(BFS)计算从起点到终点的最短路径步数。如果无法到达终点,输出-1。

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

输出格式:
一个整数,表示最短路径的步数。如果无法到达,输出-1。
示例输入1:
4 5
0 0 0 0 0
0 1 1 1 0
0 0 0 0 0
0 0 1 0 0
示例输出1:
7
说明:从(0,0)到(3,4)的最短路径经过 (0,0)→(1,0)→(2,0)→(2,1)→(2,2)→(2,3)→(3,3)→(3,4),共7步。
示例输入2:
3 3
0 1 0
0 1 0
0 1 0
示例输出2:
-1
说明:中间一列全是障碍物,无法从左边到达右边。

示例输入:

示例输出: