名字验证(严校长报名字)

名字验证

题目描述

班主任有 n 个学生的名字(互不相同)。严校长依次报出 m 个名字,判断每个名字的情况:

  • 正确且第一次出现 → 输出 OK
  • 名字错误 → 输出 WRONG
  • 正确但已出现过 → 输出 REPEAT

解题思路

核心思想

使用两个集合:

  1. valid - 存放所有正确的学生名字
  2. answered - 存放已经正确回答过(输出过 OK)的名字

判断逻辑

对于每个报出的名字 s:

  1. 如果 s 不在 valid 中 → WRONG
  2. 如果 s 在 answered 中(已回答过OK)→ REPEAT
  3. 否则 → OK,并将 s 加入 answered

代码实现

n = int(input())
arr = set(input() for _ in range(n))
m = int(input())
c = set()
for _ in range(m):
    s = input().strip()
    if s in arr:
        if s not in c:
            print("OK")
            c.add(s)
        else:
            print("REPEAT")
    else:
        print("WRONG")

代码解析

  • arr = set(...):存放正确的学生名字,set 查找效率 O(1)
  • c = set():存放已经输出过 OK 的名字
  • 判断顺序:先判断错误,再判断重复,最后判断首次正确

示例演示

输入:

5
a
b
c
ad
acd
3
a
a
e

处理过程:

  • 第1次:查询 “a”,在 arr 中且不在 c 中 → 输出 OK,c 变为 {a}
  • 第2次:查询 “a”,在 arr 中且已在 c 中 → 输出 REPEAT
  • 第3次:查询 “e”,不在 arr 中 → 输出 WRONG

输出:

OK
REPEAT
WRONG

时间复杂度

  • 创建集合:O(n)
  • 每次查询:O(1)
  • 总计:O(n + m)

名字验证(严校长报名字)
https://mingsm17518.github.io/2026/03/19/algorithm/solutions/2024_SDU_Star_Remake/03_name_check/
作者
Ming
发布于
2026年3月19日
许可协议