100
#LS1036. 【入门】出题法则

【入门】出题法则

题目描述

乐知课堂的题库有 mm 道题,现在有 nn 个学生,第 ii 个学生完成了 p[i]p[i] 道题。

由于 CSP 临近,乐知课堂为同学们举行了 kk 场比赛和训练,每场比赛和训练都会有一些学生参加,但是如何选题并不容易。

  • 对于每场比赛,需要保证 所出的题没有任何一个参赛学生做过

  • 对于每场训练,需要保证 所出的题目所有参赛学生都做过

给定你每次比赛和训练的参赛学生,你能帮助老师确定每次比赛和训练可以选择的题目都有哪些吗?

输入格式

第 1 行 2 个正整数 nnmm,表示学生数和题库中的题目总量。

22n+1n+1 行,先是 1 个正整数 pp,然后 pp 个整数表示第 ii 个学生的做题记录(可能重复做同一道题)。

n+2n+2 行,1 个正整数 kk,表示要举行的比赛和训练总数(可能有学生重复报名)。

接下来的 kk 行,每行的第 1 个整数 type 表示是训练或者比赛(1 为训练,0 为比赛)。

第 2个数 qq 表示参赛学生数,然后 qq 个正整数表示参赛学生编号。每一行中的两个数之间有一个空格。

输出格式

kk 行,每行表示本次训练或比赛可选的题目(由小到大排序,中间用一个空格隔开,如果没有供选择的题目输出一个空行)。

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

提示

  • 样例解释
  • n=5n = 5 个学生
    • 第 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]
  • k=6k = 6 场训练或者比赛
    • 第 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 中每个学生没做过的题,然后取反

数据规模与限制

  • 1n,k100,1m100001 \le n, k \le 100, 1 \le m \le 10000