题目大意
给一些课程,然后给出每个课程里的学生名。然后现在有一些学生来查询自己有哪些课,要求给出每个学生有多少门课,分别是哪些课
输入
每组包含一个测试用例。每个用例的第一行包含两个正整数 N ≤ 40000 N \leq 40000 N≤40000(要查询课程的学生数), K ≤ 2500 K \leq 2500 K≤2500(课程数编号从 1 1 1到 K K K),之后给出每个课程的信息:课程信息的第一行是课程的编号和选这门课的学生数 N ≤ 200 N \leq 200 N≤200 ,第二行给出 N N N个学生的名字。在输入的最后一行给出要查询的学生的姓名
输出
按顺序输出每个要查询学生的选课信息,格式是姓名 选课数 课程编号...
课程编号按照升序输出,如果有学生没有选课就输出姓名 0
解析
这题直接使用python的dict
就可解,但是测试点有几个比较坑的地方:
- 在给每个课程信息的时候有可能这门课没有被学生选
- 最后给要学生姓名时,可能给的数量大于 N N N
注意这些就可AC
# -*- coding: utf-8 -*-
# @Time : 2019/6/2 16:20
# @Author : ValarMorghulis
# @File : 1039.py
def solve():
n, k = map(int, input().split())
dic = dict()
for i in range(k):
course, num = map(int, input().split())
if num > 0:
names = input().split()
for name in names:
if name not in dic.keys():
dic[name] = list()
dic[name].append(course)
query = input().split()
for i in range(n):
if query[i] not in dic:
print(query[i] + ' 0')
continue
tmp = sorted(dic[query[i]])
print("%s %d" % (query[i], len(tmp)), end=' ')
for j in range(len(tmp)):
print(tmp[j], end=('\n' if j == len(tmp) - 1 else ' '))
if __name__ == "__main__":
solve()