#12294. 找座位

找座位

找座位(C语言二级 · 编程题)

时间限制: 5000 ms 内存限制: 65535 KB 分值: 20 分(建议)


🌟 题目描述

在一场考试中,监考老师手里有一份​签到表​,按座位号顺序列出所有学生的学号。 学生如果要根据这份表找到自己的座位号会很麻烦。 本题要求编写一个程序,帮助学生快速查询自己的座位号。


📥 输入格式

  1. 第一行:一个正整数 N(不超过 $10^3$),表示参加考试的学生人数。
  2. 接下来 N 行:第 i 行给出座位号为 i 的学生学号(学号是一个不超过 8 位的数字字符串,可能有前导 0,且不重复)。
  3. 再一行:一个正整数 M(不超过 $10^5$),表示要查询的学生人数。
  4. 接下来 M 行:每行给出一个要查询的学生学号。

📤 输出格式

对于每个待查询的学生学号:

  • 如果该学生在考场中有座位,输出其​座位号​(从 1 开始编号);
  • 否则输出 "NA"(Not Available,表示无座位)。

🔒 输入范围(约束)

  • 1N1031 \le N \le 10^3
  • 学号长度 ≤ 8(可能有前导零)
  • 1M1051 \le M \le 10^5
  • 学号在表中唯一出现一次或不出现
  • 输出结果不超过整型范围

✅ 样例输入

5
100013
200233
100001
520077
886759
4
520077
000000
100013
999999

🎯 样例输出

4
NA
1
NA

📊 题目分析与解法

  • 建立一个 学号 → 座位号 的快速映射表(哈希表/字典)。
  • 查询时直接在映射表中查找学号,存在则输出座位号,否则输出 "NA"

时间复杂度:

  • 建表:O(N)O(N)
  • 查询:O(1)O(1) / 次(哈希表)