【入门】出题法则
题目描述
乐知课堂的题库有 道题,现在有 个学生,第 个学生完成了 道题。
由于 CSP 临近,乐知课堂为同学们举行了 场比赛和训练,每场比赛和训练都会有一些学生参加,但是如何选题并不容易。
-
对于每场
比赛,需要保证 所出的题没有任何一个参赛学生做过; -
对于每场
训练,需要保证 所出的题目所有参赛学生都做过。
给定你每次比赛和训练的参赛学生,你能帮助老师确定每次比赛和训练可以选择的题目都有哪些吗?
输入格式
第 1 行 2 个正整数 和 ,表示学生数和题库中的题目总量。
第 到 行,先是 1 个正整数 ,然后 个整数表示第 个学生的做题记录(可能重复做同一道题)。
第 行,1 个正整数 ,表示要举行的比赛和训练总数(可能有学生重复报名)。
接下来的 行,每行的第 1 个整数 type 表示是训练或者比赛(1 为训练,0 为比赛)。
第 2个数 表示参赛学生数,然后 个正整数表示参赛学生编号。每一行中的两个数之间有一个空格。
输出格式
共 行,每行表示本次训练或比赛可选的题目(由小到大排序,中间用一个空格隔开,如果没有供选择的题目输出一个空行)。
5 10
2 3 7
1 3
2 4 7
3 3 6 10
7 1 2 3 4 7 8 9
6
0 3 3 4 5
0 3 1 3 4
1 2 1 3
0 1 5
1 1 2
1 2 3 5
5
1 2 5 8 9
7
5 6 10
3
4 7
提示
- 样例解释
- 有 个学生
- 第 1 个学生做过 2 题, 分别是 [3, 7]
- 第 2 个学生做过 1 题, 分别是 [3]
- 第 3 个学生做过 2 题, 分别是 [4, 7]
- 第 4 个学生做过 3 题, 分别是 [3, 6, 10]
- 第 5 个学生做过 7 题, 分别是 [1, 2, 3, 4, 7, 8, 9]
- 有 场训练或者比赛
- 第 1 场是比赛, 有 [3, 4, 5] 学生参加, 只有题目 [5] 没有被他们其中任何一人做过
- 第 2 场是比赛, 有 [1, 3, 4] 学生参加, 题目 [1, 2, 5, 8, 9] 没有被他们其中任何一人做过
- 第 3 场是训练, 有 [1, 3] 学生参加, 只有题目 [7] 是他们 3 人都 做过的
- 可以用 2 个 set,分别存储每个学生做过的题,和没做过的题
// s 存储学生做过的题, fs 存储学生没做过的题
vector<set<int>> s(n + 1), fs(n + 1);
// 对于比赛, 需要找每个学生都没做过的题, 可以合并 s 中每个学生做过的题,然后取反
// 对于训练, 需要找每个学生都做过的题, 可以合并 fs 中每个学生没做过的题,然后取反