📅  最后修改于: 2023-12-03 15:12:38.338000             🧑  作者: Mango
本次考试主要考察计算机科学领域的算法和数据结构。以下是该题集中的题目和相关信息:
题目描述:给定两个字符串s1和s2,求它们的最长公共子序列。
要求实现函数:
def lcs(s1: str, s2: str) -> int:
pass
输入:
输出:
示例:
输入:
s1 = 'ACCGGTCGAGTGCGCGGAAGCCGGCCGAA'
s2 = 'GTCGTTCGGAATGCCGTTGCTCTGTAAA'
输出:
LCS(s1, s2) = 'GTCGTCGGAAGCCGGCCGAA'
题目描述:给定一个整数序列A,求其最长递增子序列。
要求实现函数:
def lis(A: List[int]) -> int:
pass
输入:
输出:
示例:
输入:
A = [10, 9, 2, 5, 3, 7, 101, 18]
输出:
LIS(A) = 4
题目描述:给定一个n×m的二维矩阵,每个格子可以是空地(".")或者墙壁("#"),其中有两个特殊的格子,分别用字母"S"和字母"E"表示。S是起点,E是终点。一个人在起点,他可以向上下左右四个方向行进,但不能行进到墙壁处。除此之外,这个人还会使用传送门技能,他可以花费1的行动力把自己瞬移到另一个传送门上。传送门必须成对出现,即如果有一个位置是传送门入口,那么矩阵中必须要有另一个位置是传送门出口。请问这个人从起点到终点至少需要花费多少行动力。
要求实现函数:
def portal(matrix: List[List[str]]) -> int:
pass
输入:
输出:
示例:
输入:
matrix = [
['S', 'A', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '#', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '#', '#', '#', '.', '#', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '#', '.', '.', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '#', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', 'E'],
]
输出:
portal(matrix) = 16
题目描述:有一个大型的建筑物在建造中。每个工人都有一个探测器,可以用来检测自己身后的障碍物(如钢筋、砖块等)到自己的距离,但探测器不能向前或向上或向下或向左斜向上/下发射,仅能向后或向右斜向上/下发射(参见下图)。现有一名工人身处建筑物内部的某一个位置(除去边缘位置),他想救出在建筑物内部其它的工人。他们的位置都是已知的,而且第i个工人的位置可以用二元组 (xi,yi) 来表示。
探测器到障碍物的距离有限制(由函数参数D给出)。现在请你为这个工人设计一个寻找其它工人的算法。每个工人都需要一个探测器才能考虑被寻找的对象。
注意:这里只要求找到一名被寻找的工人就可以了。
要求实现函数:
def rescue(D: int, x: int, y: int, workers: List[Tuple[int, int]]) -> Union[Tuple[int, int], None]:
pass
输入:
输出:
示例:
输入:
D = 10
x = 20
y = 20
workers = [(40, 20), (30, 30), (20, 40)]
输出:
rescue(D, x, y, workers) = (40, 20)
题目描述:给定一个整数数组A,寻找一个下标i(0 ≤ i < n),满足A[0] + A[1] + ... + A[i-1] = A[i+1] + A[i+2] + ... + A[n-1]。
要求实现函数:
def equilibrium_point(A: List[int]) -> Union[int, None]:
pass
输入:
输出:
示例:
输入:
A = [0, -3, 5, -4, -2, 3, 1, 0]
输出:
equilibrium_point(A) = 3