| Run ID | 作者 | 问题 | 语言 | 测评结果 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|
| 86983 | sh25_shenpy | 烦人的幻灯片(slides) | Python3 | 通过 | 34 MS | 3876 KB | 2199 | 2026-04-10 14:58:35 |
def can_match(graph, n, forbidden=None): # forbidden: (i, j) 表示禁止使用边 i->j match = [-1] * n # match[j] = i 表示数字j匹配到幻灯片i def dfs(u, visited): for v in range(n): if graph[u][v] and (forbidden is None or (u, v) != forbidden) and not visited[v]: visited[v] = True if match[v] == -1 or dfs(match[v], visited): match[v] = u return True return False count = 0 for u in range(n): visited = [False] * n if dfs(u, visited): count += 1 return count == n, match def solve(): n = int(input()) slides = [] for _ in range(n): xmin, xmax, ymin, ymax = map(int, input().split()) slides.append((xmin, xmax, ymin, ymax)) nums = [] for _ in range(n): x, y = map(int, input().split()) nums.append((x, y)) # 构建图:graph[i][j] = True 表示幻灯片i可以包含数字j+1 graph = [[False] * n for _ in range(n)] for i in range(n): xmin, xmax, ymin, ymax = slides[i] for j in range(n): x, y = nums[j] if xmin <= x <= xmax and ymin <= y <= ymax: graph[i][j] = True # 第一次求完美匹配 has_perfect, match = can_match(graph, n) if not has_perfect: print("None") return # match[j] = i 表示数字j匹配到幻灯片i # 转换为 slide_match[i] = j 表示幻灯片i匹配到数字j slide_match = [-1] * n for j in range(n): i = match[j] slide_match[i] = j # 检查唯一性:对每条匹配边,删除后看是否还能完美匹配 for i in range(n): j = slide_match[i] # 删除边 (i, j) has_perfect_without, _ = can_match(graph, n, forbidden=(i, j)) if has_perfect_without: print("None") return # 唯一匹配,按字母顺序输出 for i in range(n): letter = chr(ord('A') + i) num = slide_match[i] + 1 print(f"{letter} {num}") solve()