酷代码 AI
菜单

【基础】龙虎斗 显示标签 时间限制:C/C++ 1000MS,其他语言 2000MS 内存限制:C/C++ 256MB,其他语言 512MB 难度:基础 分数:100 OI排行榜得分:14(0.1*分数+2*难度) 出题人: 描述 轩轩和凯凯正在玩一款叫《龙虎斗》的游戏,游戏的棋盘是一条线段,线段上有 n个兵营(自左至右编号 1 ~ n),相邻编号的兵营之间相隔 1 厘米,即棋盘为长度为n − 1 厘米的线段。i号兵营里有ci位工兵。 下面图 1 为 n = 6 的示例: 轩轩在左侧,代表“龙”;凯凯在右侧,代表“虎”。 他们以 m 号兵营作为分界,靠左的工兵属于龙势力,靠右的工兵属于虎势力,而第 m号兵营中的工兵很纠结,他们不属于任何一方。 一个兵营的气势为:该兵营中的工兵数 × 该兵营到m号兵营的距离;参与游戏一方的势力定义为:属于这一方所有兵营的气势之和。 下面图 2 为 n = 6,n= 4 的示例,其中红色为龙方,黄色为虎方: 游戏过程中,某一刻天降神兵,共有s1位工兵突然出现在了p1号兵营。作为轩轩和凯凯的朋友,你知道如果龙虎双方气势差距太悬殊,轩轩和凯凯就不愿意

以下是解决“龙虎斗”问题的Python代码: ```python # 读取兵营数量 n = int(input()) # 读取每个兵营的工兵数量 c = list(map(int, input().split())) # 读取m, p1, s1, s2 m, p1, s1, s2 = map(int, input().split()) # 先将突然出现的s1位工兵加到p1号兵营 c[p1 - 1] += s1 # 计算龙方和虎方的初始气势 dragon_power = 0 tiger_power = 0 for i in range(n): # 计算距离m号兵营的距离 distance = abs(i + 1 - m) if i + 1 < m: # 龙方势力 dragon_power += c[i] * distance elif i + 1 > m: # 虎方势力 tiger_power += c[i] * distance # 初始化最小差距和对应的兵营编号 min_diff = float('inf') best_p2 = 1 # 遍历每个兵营,尝试将s2位工兵派往该兵营 for p2 in range(1, n + 1): new_dragon_power = dragon_power new_tiger_power = tiger_power distance = abs(p2 - m) if p2 < m: # 若p2在m号兵营左侧,更新龙方气势 new_dragon_power += s2 * distance elif p2 > m: # 若p2在m号兵营右侧,更新虎方气势 new_tiger_power += s2 * distance # 计算新的气势差距 diff = abs(new_dragon_power - new_tiger_power) # 如果差距更小,更新最小差距和对应的兵营编号 if diff < min_diff: min_diff = diff best_p2 = p2 # 输出结果 print(best_p2) ``` 代码解释: 1. 输入处理:首先读取兵营数量`n`,然后读取每个兵营的工兵数量并存储在列表`c`中,接着读取`m`, `p1`, `s1`, `s2`。 2. 更新兵营工兵数量:将突然出现的`s1`位工兵加到`p1`号兵营。 3. 计算初始气势:遍历每个兵营,根据其位置计算到`m`号兵营的距离,分别计算龙方和虎方的初始气势。 4. 尝试不同的派遣方案:遍历每个兵营,将`s2`位工兵派往该兵营,更新龙方和虎方的气势,计算新的气势差距。 5. 选择最优方案:记录最小的气势差距和对应的兵营编号。 6. 输出结果:输出使得双方气势差距最小的兵营编号。 复杂度分析: - 时间复杂度:$O(n)$,其中$n$是兵营的数量。主要时间开销在于遍历每个兵营计算气势和尝试不同的派遣方案。 - 空间复杂度:$O(n)$,主要用于存储每个兵营的工兵数量。 [2026-02-05 17:06:22 | AI问答 | 709点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多