pta7-37 情人节
时间: 2025-01-02 13:39:20 浏览: 8
### PTA 7-37 情人节 编程题解
情人节是一个特殊的日子,在信息时代被赋予了新的表达方式[^1]。对于PTA平台上的题目7-37,其核心在于处理一系列的情人节礼物分配问题。
#### 题目描述
给定N个人以及他们之间互赠的礼物数目,计算每个人收到的最大礼物数,并找出谁收到了最多的礼物。如果有多个人拥有相同的最大值,则按编号从小到大输出这些人。
#### 解决方案概述
为了高效解决这个问题,可以采用哈希表来记录每个人的礼物接收情况。遍历输入数据的同时更新这个表格,最后再遍历一次找到具有最高礼物数量的人选并按照要求排序输出结果。
#### Python 实现代码
下面提供了一个Python版本的具体实现方法:
```python
def find_max_gift_receivers(n, gifts):
from collections import defaultdict
gift_counts = defaultdict(int)
# 记录每人的礼物数量
for giver, receiver in gifts:
gift_counts[receiver] += 1
max_gifts = max(gift_counts.values(), default=0)
receivers_with_max_gifts = sorted(
person for person, count in gift_counts.items() if count == max_gifts
)
return receivers_with_max_gifts
if __name__ == "__main__":
n = int(input().strip())
gifts = []
for _ in range(n):
line = list(map(int, input().split()))
sender_id = line.pop(0)
recipients_ids = set(line) - {0} # 去除可能存在的自送给自己或其他非法ID的情况
for recipient_id in recipients_ids:
gifts.append((sender_id, recipient_id))
result = find_max_gift_receivers(n, gifts)
print(' '.join(str(x) for x in result or ['None']))
```
此程序首先读取整型数值`n`表示参与者的总数,之后逐行解析参与者之间的关系形成一对多的形式存储于列表中;接着调用函数`find_max_gift_receivers()`完成主要逻辑运算得到最终的结果集;最后将符合条件的人物ID打印出来作为答案返回。
阅读全文