P. 整数集合类 (IntegerSet)

传统 1000 ms 256 MiB
标准 IO
文本比较

题目描述

请创建一个名为 IntegerSet 的类,用于管理 00100100 范围内的整数集合。

类内部实现要求:

  1. 内部表示:使用一个大小为 101101 的数组(例如 intbool 数组)来表示集合。
    • 如果整数 ii 在集合中,则数组元素 a[i]a[i]11
    • 如果整数 jj 不在集合中,则数组元素 a[j]a[j]00
  2. 构造函数
    • 默认构造函数:将集合初始化为“空集”(全零数组)。
    • 带参构造函数:接收一个整数数组和该数组的大小,利用该数组初始化集合。
  3. 成员函数
    • unionOfSets:创建并返回一个新的 IntegerSet,它是两个现有集合的 并集
    • intersectionOfSets:创建并返回一个新的 IntegerSet,它是两个现有集合的 交集
    • insertElement:将新整数 kk 插入集合(将 a[k]a[k] 置为 11)。若 kk 无效(超出 01000-100),打印 "Invalid Insert"。
    • deleteElement:将整数 mm 从集合删除(将 a[m]a[m] 置为 00)。注意:必须先判断 kk 是否在 [0,100][0,100] 之间,若不在区间中,打印 "Invalid Delete";否则执行删除。如果删除的元素不存在于集合中,也认为删除操作成功,需要输出集合。
    • printSet:打印集合内容。输出由空格分隔的数字列表。如果集合为空,则打印 "---"
    • isEqualTo:判断两个集合是否相等(即包含完全相同的元素)。

测试程序要求: 输入将包含两个初始集合 AABB 的数据,随后是一系列操作指令。你需要根据指令调用相应的成员函数并输出结果。

输入格式

第一行包含一个整数 TT,表示测试数据的组数。 对于每组数据:

  1. 第一行包含整数 NN,表示集合 AA 的初始元素个数。随后 NN 个整数表示集合 AA 的元素。
  2. 第二行包含整数 MM,表示集合 BB 的初始元素个数。随后 MM 个整数表示集合 BB 的元素。
  3. 第三行包含整数 QQ,表示操作指令的数量。
  4. 随后 QQ 行,每行包含一个指令,格式如下:
    • UNION:计算 ABA \cup B 并打印结果。
    • INTERSECTION:计算 ABA \cap B 并打印结果。
    • INSERT <SetID> <Val>:向集合(AB)插入数值 Val,操作后打印该集合。
    • DELETE <SetID> <Val>:从集合(AB)删除数值 Val,操作后打印该集合。
    • EQUAL:判断 AABB 是否相等。
    • PRINT <SetID>: 输出集合(AB

输出格式

根据指令输出对应结果:

  • UNION / INTERSECTION:输出一行集合内容(数字间用空格分隔,空集输出 ---)。
  • INSERT / DELETE
    • 若参数无效,输出 Invalid InsertInvalid Delete
    • 若参数有效,操作后输出一行该集合的内容。
  • EQUAL:输出 TrueFalse

样例

样例输入

1
3 1 2 5
2 5 99
7
UNION
INTERSECTION
INSERT A 10
DELETE B 5
DELETE A 155
DELETE A 99
EQUAL

样例输出

1 2 5 99
5
1 2 5 10
99
Invalid Delete
1 2 5 10
False

数据范围与提示

数据范围与提示

  • 集合元素范围:0x1000 \le x \le 100
  • 操作指令保证 SetID 仅为 AB
  • unionOfSetsintersectionOfSets 不应修改原集合,而是返回新对象。