题解:P12268 [蓝桥杯 2024 国 Python B] 球衣号码

· · 题解

题解:坤之队的球衣号码

题目描述

在篮球之都,有一支由 n 位球员组成的“坤之队”。他们参加了 m 场比赛,每场比赛前教练会指定一名队长,并将队长的球衣号码设为 0。其他球员的球衣号码根据与队长的位置关系调整:队长右边的球员号码依次比左边大 1,左边的依次比右边大 1。经过 m 场比赛后,求每个球员在所有比赛中穿过的最大球衣号码。

输入格式

输出格式

解题思路

  1. 球衣号码规律:对于队长编号 p,球员 i 的球衣号码为 |i - p|
  2. 最大号码:对于每个球员 i,队长为 j 时,其最大球衣号码是所有比赛中 |i - p_j| 的最大值。
  3. 优化:可以通过观察发现,最大球衣号码只与所有队长编号的最小值 mmin 和最大值 mmax 有关。因此,对于每个 i,其最大球衣号码为 max(|i-mmin|,|i-mmax|)

    代码实现

import sys

def main():
    # 读取 n 和 m
    n, m = map(int, sys.stdin.readline().split())
    # 初始化最大值和最小值
    mmax = -float('inf')
    mmin = float('inf')
    # 读取 m 个队长编号,更新最大值和最小值
    t_list = list(map(int, sys.stdin.readline().split()))
    for t in t_list:
        mmax = max(mmax, t)  # 取最大值
        mmin = min(mmin, t)  # 取最小值

    # 根据前面推理得出的公式输出答案
    for i in range(1, n + 1):
        print(max(abs(i - mmin), abs(i - mmax)), end=" ")

if __name__ == "__main__":
    main()

The end.