L2-028 秀恩爱分得快
时间: 2025-06-01 10:02:02 浏览: 7
### L2-028 秀恩爱分得快 题解
此题目属于模拟类问题,主要考察对输入数据的处理能力以及逻辑判断的能力。以下是详细的解答过程。
#### 数据结构设计
为了高效存储每个人与其亲密关系的信息,可以采用字典来记录每个人的编号及其对应的亲密值列表。对于每一对 `(A, B)` 的亲密值 `C`,将其分别存入以 A 和 B 为键的字典中[^1]。
```python
from collections import defaultdict
n, m = map(int, input().split())
data = list(map(int, input().split()))
pairs = []
for _ in range(m):
pairs.append(list(map(int, input().split())))
```
#### 计算亲密度最高的对象
遍历所有的亲密关系对,并更新每位参与者与异性的最大亲密值及对应的对象编号。需要注意的是,在存在多个相同最大亲密值的情况下,应按照绝对值从小到大排序输出结果[^2]。
```python
def find_most_intimate(data, pairs):
intimacy_dict = defaultdict(lambda: {"max_val": float('-inf'), "partners": []})
for pair in pairs:
a, b, c = pair
sign_a = data[a]
sign_b = data[b]
if (sign_a * sign_b) < 0: # Check opposite gender
update_partner(a, b, c, intimacy_dict)
update_partner(b, a, c, intimacy_dict)
return intimacy_dict
def update_partner(x, y, val, dict_):
if val > dict_[x]["max_val"]:
dict_[x]["max_val"] = val
dict_[x]["partners"] = [y]
elif val == dict_[x]["max_val"]:
dict_[x]["partners"].append(y)
intimacy_info = find_most_intimate(data, pairs)
```
#### 特殊情况处理
当两个人互为对方的最大亲密伙伴时,仅需输出这两人即可。其他情况下则需要依据规则逐一打印出各自的最亲密伴侣。
```python
a_partners = sorted(intimacy_info[-3]["partners"], key=lambda x: abs(x))
b_partners = sorted(intimacy_info[2]["partners"], key=lambda x: abs(x))
if (-3 in intimacy_info and 2 in intimacy_info[-3]['partners'] and
2 in intimacy_info and -3 in intimacy_info[2]['partners']):
print(f"{-3} {2}")
else:
result = ""
for pa in a_partners:
result += f"{pa} "
result += "-3 "
for pb in b_partners:
result += f"{pb} "
result += "2"
print(result.strip())
```
以上代码实现了该题目的功能需求,并遵循了给定的数据范围和特殊条件下的输出要求。
阅读全文
相关推荐
















