L2-044 大众情人测试点2
时间: 2025-05-19 21:40:57 浏览: 14
### L2-044 大众情人 测试点2 的解析
L2-044 “大众情人” 是一道典型的编程竞赛题目,主要考察选手对于数组操作、逻辑判断以及输入输出处理的能力。虽然当前引用材料并未直接提及该题目的具体细节[^1],但从常见的 PAT (Programming Ability Test) 题目库来看,此题的核心在于统计一组数据中的“最受欢迎者”,即某个个体被其他所有人喜欢的程度。
#### 问题分析
假设我们有 N 个人,每个人会给出他们所喜欢的人的编号列表。我们需要找到一个人,使得这个人被除了自己之外的所有其他人喜欢。如果存在这样的“大众情人”,则返回其编号;否则返回 -1 表示不存在这样的人。
以下是解决这一问题的关键步骤:
1. **构建关系矩阵**
使用二维布尔数组 `likes[N][N]` 来表示每个人的喜好情况。其中 `likes[i][j] = true` 表示第 i 个人喜欢第 j 个人。
2. **计数支持度**
对于每一个人,计算有多少人喜欢他/她。这可以通过遍历整个关系矩阵完成。
3. **验证条件**
如果某人的支持人数等于总人数减去他自己,则此人可以被认为是“大众情人”。
#### Python 实现代码
下面是一个基于上述思路的 Python 实现方案:
```python
def find_popular_person(n, likes):
# 初始化受欢迎程度计数器
popularity_count = [0] * n
# 统计每人的受欢迎次数
for i in range(n):
for j in range(n):
if i != j and likes[i][j]:
popularity_count[j] += 1
# 查找是否有满足条件的“大众情人”
for person in range(n):
if popularity_count[person] == n - 1:
return person + 1 # 返回编号(从1开始)
return -1 # 若无符合条件者,返回-1
# 输入样例模拟
if __name__ == "__main__":
n = int(input().strip()) # 获取人员数量
likes = []
for _ in range(n):
row = list(map(int, input().split()))
likes.append([True if x == 1 else False for x in row]) # 转化为布尔值矩阵
result = find_popular_person(n, likes)
print(result)
```
这段代码通过读取输入并建立偏好矩阵来解决问题,并最终输出结果。注意这里假定输入格式严格遵循标准形式,实际应用中可能需要额外增加错误检测机制。
#### 注意事项
- 时间复杂度 O(N²),适用于中小规模的数据集。
- 空间复杂度同样为 O(N²),因为存储了一个完整的 NxN 关系表。
- 当前实现未考虑边界情况如非法输入等问题,在正式提交之前应进一步完善鲁棒性设计。
阅读全文
相关推荐
















