1448 : 整数生成器

时间限制Time Limit 1 Sec 内存限制Memory Limit 256 MB 提交次数Submitted 0 Times 通过次数Solved 0 Times 特判评测Special Judge

题目描述Description

现有一个整数集合 S,你的任务是通过不超过 70 次位运算操作,利用 S 来生成一个给定的整数 x

具体地,给定一个大小为 n 的整数集合 S 和一个整数 x。每次操作可以选择两个 S 中的整数 ab(可以相同),将 a\ \texttt{or}\ ba\oplus ba\ \texttt{and}\ b 中的一个整数插入到 S 中。你需要判断是否可以通过不超过 70 次操作使得 x\in S,若可以,你还需要给出一种合法的操作过程。

其中,a\ \texttt{or}\ bab 的按位或,a\oplus bab 的按位异或,a\ \texttt{and}\ bab 的按位与。

输入格式Input

第一行两个整数 n,x1\le n\le 10^5,0\le x< 2^{30})。

第二行 n 个整数 a_1,a_2,\ldots ,a_n0\le a_i< 2^{30}),表示最初 S 中的元素,保证这些整数两两不同。

输出格式Output

若无法通过不超过 70 次操作使得 x\in S,输出一行一个整数 -1

否则,第一行输出一个整数 k0\le k\le 70),表示操作次数。

接下来 k 行依次输出这 k 次操作。对于每次操作输出一行三个整数 t,a,bt\in \{0,1,2\})。若 t=0,则表示这次操作将 a\ \texttt{or}\ b 插入 S 中,若 t=1,则表示将 a\oplus b 插入 S 中,若 t=2,则表示将 a\ \texttt{and}\ b 插入 S 中。你需要保证对于此次操作时的 S,有 a\in Sb\in S

本题中,你不需要最小化操作次数,如有多个满足条件的操作方案,输出任意一个均可。

样例Sample

提示Hint

-

出题Author

UESTC

来源Source

广东省第二十二届大学生程序设计竞赛(GDCPC2025)