📜  门| GATE CS Mock 2018年|套装2 |第57章(1)

📅  最后修改于: 2023-12-03 15:12:38.338000             🧑  作者: Mango

门| GATE CS Mock 2018年|套装2 |第57章

本次考试主要考察计算机科学领域的算法和数据结构。以下是该题集中的题目和相关信息:

题目列表
  1. 最长公共子序列 (LCS)
  2. 最长递增子序列 (LIS)
  3. 传送门 (Portal)
  4. 救援任务 (Rescue)
  5. 平衡点 (Equilibrium Point)
题目详细说明
1. 最长公共子序列 (LCS)

题目描述:给定两个字符串s1和s2,求它们的最长公共子序列。

要求实现函数:

def lcs(s1: str, s2: str) -> int:
    pass

输入:

  • s1 (1 ≤ |s1| ≤ 1000):字符串s1。
  • s2 (1 ≤ |s2| ≤ 1000):字符串s2。

输出:

  • 返回两个字符串的最长公共子序列的长度。

示例:

输入:

s1 = 'ACCGGTCGAGTGCGCGGAAGCCGGCCGAA'
s2 = 'GTCGTTCGGAATGCCGTTGCTCTGTAAA'

输出:

LCS(s1, s2) = 'GTCGTCGGAAGCCGGCCGAA'
2. 最长递增子序列 (LIS)

题目描述:给定一个整数序列A,求其最长递增子序列。

要求实现函数:

def lis(A: List[int]) -> int:
    pass

输入:

  • A (1 ≤ |A| ≤ 1000):整数序列A。

输出:

  • 返回整数序列A的最长递增子序列的长度。

示例:

输入:

A = [10, 9, 2, 5, 3, 7, 101, 18]

输出:

LIS(A) = 4
3. 传送门 (Portal)

题目描述:给定一个n×m的二维矩阵,每个格子可以是空地(".")或者墙壁("#"),其中有两个特殊的格子,分别用字母"S"和字母"E"表示。S是起点,E是终点。一个人在起点,他可以向上下左右四个方向行进,但不能行进到墙壁处。除此之外,这个人还会使用传送门技能,他可以花费1的行动力把自己瞬移到另一个传送门上。传送门必须成对出现,即如果有一个位置是传送门入口,那么矩阵中必须要有另一个位置是传送门出口。请问这个人从起点到终点至少需要花费多少行动力。

要求实现函数:

def portal(matrix: List[List[str]]) -> int:
    pass

输入:

  • matrix (1 ≤ n,m ≤ 100):由"."、"#"、"S"、"E"、"A"、"B"共六种字符构成的二维矩阵。

输出:

  • 返回从起点到终点至少需要花费的行动力数。

示例:

输入:

matrix = [
    ['S', 'A', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '#', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '#', '#', '#', '.', '#', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '#', '.', '.', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '#', '#', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '.', '#'],
    ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', 'E'],
]

输出:

portal(matrix) = 16
4. 救援任务 (Rescue)

题目描述:有一个大型的建筑物在建造中。每个工人都有一个探测器,可以用来检测自己身后的障碍物(如钢筋、砖块等)到自己的距离,但探测器不能向前或向上或向下或向左斜向上/下发射,仅能向后或向右斜向上/下发射(参见下图)。现有一名工人身处建筑物内部的某一个位置(除去边缘位置),他想救出在建筑物内部其它的工人。他们的位置都是已知的,而且第i个工人的位置可以用二元组 (xi,yi) 来表示。

探测器到障碍物的距离有限制(由函数参数D给出)。现在请你为这个工人设计一个寻找其它工人的算法。每个工人都需要一个探测器才能考虑被寻找的对象。

注意:这里只要求找到一名被寻找的工人就可以了。

要求实现函数:

def rescue(D: int, x: int, y: int, workers: List[Tuple[int, int]]) -> Union[Tuple[int, int], None]:
    pass

输入:

  • D (1 ≤ D ≤ 100):探测器到障碍物的最大距离。
  • x (1 ≤ x ≤ 98):工人所在坐标的横坐标。
  • y (1 ≤ y ≤ 98):工人所在坐标的纵坐标。
  • workers (1 ≤ |workers| ≤ 100):所有需要被寻找的工人的坐标。其中第i个工人的坐标为 (xi,yi),满足(1 ≤ xi, yi ≤ 98) 且不等于工人所在坐标(x, y)。

输出:

  • 如果能找到符合条件的工人,则返回该工人的二元组坐标。否则返回None。

示例:

输入:

D = 10
x = 20
y = 20
workers = [(40, 20), (30, 30), (20, 40)]

输出:

rescue(D, x, y, workers) = (40, 20)
5. 平衡点 (Equilibrium Point)

题目描述:给定一个整数数组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 (1 ≤ |A| ≤ 10^6, -10^3 ≤ Ai ≤ 10^3):整数数组A。

输出:

  • 找到符合条件的下标,则返回该下标。否则返回None。

示例:

输入:

A = [0, -3, 5, -4, -2, 3, 1, 0]

输出:

equilibrium_point(A) = 3