题目描述
每位考生参加考试时都会被分配一个唯一的座位号。考试结束后,按座位号从小到大的顺序输出所有考生的准考证号和试机座位号。
输入输出格式
输入:
- 第一行:一个正整数 N,表示考生人数
- 接下来 N 行:每行包含一个准考证号(17位字符串)和一个试机座位号(正整数)
- 最后一行:一个正整数 M,表示查询的个数
- 接下来 M 行:每行包含一个准考证号
输出:
- 对于每个查询,输出一行,包含该考生的准考证号和试机座位号
- 如果找不到对应的考生,输出 "Not Found"
样例
输入
3
1012020043221 1001
1012020043222 1002
1012020043223 1003
2
1012020043221
1012020043224
输出
1012020043221 1001
Not Found
解题思路
这是一道简单的查找问题:
- 使用 HashMap 存储考生信息,key 为准考证号,value 为试机座位号
- 读取所有考生信息存入 HashMap
- 根据查询的准考证号从 HashMap 中查找并输出
注意:由于 HashMap 的查找时间复杂度是 O(1),这种方法效率很高。
代码实现
Java
import java.util.HashMap;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
HashMap<String, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
String id = scanner.next();
int seat = scanner.nextInt();
map.put(id, seat);
}
int m = scanner.nextInt();
for (int i = 0; i < m; i++) {
String query = scanner.next();
if (map.containsKey(query)) {
System.out.println(query + " " + map.get(query));
} else {
System.out.println("Not Found");
}
}
}
}
Python
n = int(input())
seat_map = {}
for _ in range(n):
parts = input().split()
exam_id = parts[0]
seat = int(parts[1])
seat_map[exam_id] = seat
m = int(input())
for _ in range(m):
query = input().strip()
if query in seat_map:
print(f"{query} {seat_map[query]}")
else:
print("Not Found")
运行验证
Java
输入: 3
1012020043221 1001
1012020043222 1002
1012020043223 1003
2
1012020043221
1012020043224
输出:
1012020043221 1001
Not Found
Python
输入: 3
1012020043221 1001
1012020043222 1002
1012020043223 1003
2
1012020043221
1012020043224
输出:
1012020043221 1001
Not Found
复杂度分析
- 时间复杂度:O(N + M),N 为考生人数,M 为查询次数
- 空间复杂度:O(N),需要存储所有考生信息
总结
本题考查 HashMap(字典)的使用。通过 HashMap 建立准考证号到试机座位号的映射,可以实现高效的查找。注意 Java 中使用 HashMap<String, Integer>,Python 中使用字典实现相同功能。本题难度不大,属于基础数据结构应用题。