酷代码 AI
菜单

你要和田忌赛马。你们各自有 N N 匹马,并且要进行 N N 轮比赛,每轮比赛,你们都要各派出一匹马决出胜负。 你的马匹的速度分别为 u 1 , u 2 , ⋯ , u n u 1 ​ ,u 2 ​ ,⋯,u n ​ ,田忌的马匹的速度分别为 v 1 , v 2 , ⋯   , v n v 1 ​ ,v 2 ​ ,⋯,v n ​ 。田忌会按顺序派出他的马匹,请问你要如何排兵布阵,才能赢得最多轮次的比赛?巧合的是,你和田忌的所有马匹的速度两两不同,因此不可能出现平局。 输入格式 第一行一个整数 N N。保证 1 ≤ N ≤ 5 × 10 4 1≤N≤5×10 4 接下来一行 N N 个用空格隔开的整数,依次为 u 1 , u 2 , ⋯   , u n u 1 ​ ,u 2 ​ ,⋯,u n ​ ,表示你的马匹们的速度。保证 1 ≤ u i ≤ 2 N 1≤u i ​ ≤2N。 接下来一行 N N 个用空格隔开的整数,依次为 v 1 , v 2 , ⋯   , v n v 1 ​ ,v 2 ​ ,⋯,v

```python # 获取马匹数量 N = int(input()) # 读取你的马匹速度列表并排序 your_horses = sorted(map(int, input().split())) # 读取田忌的马匹速度列表 tianji_horses = list(map(int, input().split())) win_count = 0 # 遍历田忌的每一匹马 for tianji_horse in tianji_horses: found = False for i, your_horse in enumerate(your_horses): if your_horse > tianji_horse: win_count = win_count + 1 # 移除已出战的马 your_horses.pop(i) found = True break if not found: # 如果没有能赢的马,派出速度最慢的马 your_horses.pop(0) print(win_count) ``` 代码解释 1. 输入处理:首先读取马匹数量 `N`,接着读取你的马匹速度列表 `your_horses` 并对其进行排序,最后读取田忌的马匹速度列表 `tianji_horses`。 2. 策略执行与计数:遍历田忌按顺序派出的每一匹马,对于每一匹马,在你的马匹列表中寻找速度比它快的马。若找到,将胜利轮数 `win_count` 加 1,并移除这匹已出战的马;若没找到,移除你速度最慢的马。 3. 输出结果:输出最终赢得的轮次数量 `win_count`。 复杂度分析 - 时间复杂度:排序操作的时间复杂度为 $O(N log N)$,遍历田忌的马匹并在你的马匹列表中查找合适的马的时间复杂度为 $O(N^2)$,因此总的时间复杂度为 $O(N^2)$。 - 空间复杂度:主要的空间开销是存储马匹速度的列表,因此空间复杂度为 $O(N)$。 [2026-01-10 20:35:40 | AI问答 | 430点数解答]

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