题解 | 特殊城市

特殊城市

https://www.nowcoder.com/practice/46f68af83db74b709a788dedb656c5f9

import sys
from collections import defaultdict
# 读取所有输入,处理大量数据更高效
data = sys.stdin.read().split()
ptr = 0
N = int(data[ptr])
ptr += 1

# 统计 (prefix, state) 组合的出现次数
combo_count = defaultdict(int)

for _ in range(N):
    city = data[ptr]
    state = data[ptr + 1]
    # 提取城市名称前两位作为前缀
    prefix = city[:2]
    combo_count[(prefix, state)] += 1
    ptr += 2

result = 0
# 遍历所有唯一的 (prefix, state) 组合
for (prefix_a, state_a), count_a in combo_count.items():
    # 特殊对的反向组合是 (state_a, prefix_a)
    reverse_combo = (state_a, prefix_a)
    # 检查反向组合是否存在,且两个组合的州不同(prefix_a != state_a 保证不同州)
    if reverse_combo in combo_count and prefix_a != state_a:
        count_b = combo_count[reverse_combo]
        result += count_a * count_b

# 每对城市被计算了两次(A-B 和 B-A),所以除以2
print(result // 2)

全部评论

相关推荐

12-24 20:44
武汉大学 Java
点赞 评论 收藏
分享
12-27 22:28
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务