题目描述 下个学期XCPC有很多场比赛,但是每支队伍被限定每年只能参加一部分的比赛,这让身为队长的 Newbie_QQH犯难了,该如何做赛站选择,于是他找到了你来帮他解决这个问题。 问题是这样的: XCPC一共有N场比赛,每支队伍只能参加K场比赛。 赛站信息包括赛站名字,赛站难度,赛站距离,是否有参赛资格。 赛站名字用字符串表示。 通过对每个赛站的研究,队长对每场比赛都得出了一个难度系数。(不同赛站的难度系数可能相同) 每一场赛站的参赛要求不同,如果没有参赛资格就不能报名参赛。 Newbie_QQH想参加尽可能更简单的比赛,如果比赛的难度系数相同,他会倾向选赛站距离更近的比赛。请你帮他设计程序选择比赛。 输出选择赛站数量和赛站的信息。 如果有多个赛站选择,优先输出难度系数简单,赛站距离更近的比赛,保证不会有两个难度系数和赛站距离都一样的赛站。 输入描述: 第1行输入两个整数N和K,代表比赛数量,参赛限制 第2-N+1行每行输入Si,Ai,Bi,Ci,代表赛站名字,难度,距离,是否有参赛资格(1代表有资格,0代表无资格) 输出描述: 第一行输出参加赛站的数量cnt 接下来cnt行输出赛站信息。
时间: 2024-03-25 15:40:16 浏览: 26
以下是基于 Python 的解法:
```python
n, k = map(int, input().split())
data = []
for i in range(n):
s, a, b, c = input().split()
data.append((s, int(a), int(b), int(c)))
# 筛选有参赛资格的赛站
qualified_data = [d for d in data if d[3] == 1]
# 根据难度系数和距离排序,优先选择难度系数小和距离近的赛站
qualified_data.sort(key=lambda x: (x[1], x[2]))
# 取前k个赛站作为选择
selected_data = qualified_data[:k]
print(len(selected_data))
for d in selected_data:
print(d[0], d[1], d[2], d[3])
```
首先读入比赛数量 `n` 和参赛限制 `k`,然后读入每个赛站的信息,存储在 `data` 列表中,每个元素都是一个四元组,表示赛站名字、难度、距离和是否有参赛资格。
接着,我们筛选出有参赛资格的赛站,存储在 `qualified_data` 列表中。
然后,我们根据题目要求,按照难度系数和距离排序,优先选择难度系数小和距离近的赛站。我们使用 `sort` 方法进行排序,其中 `key` 参数是一个函数,用于指定排序的关键字。这里我们使用一个 lambda 函数,先按难度系数排序,如果相同则按距离排序。
最后,我们取前 `k` 个赛站作为选择,并输出结果。