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 中的整数 a 和 b(可以相同),将 a\ \texttt{or}\ b,a\oplus b 和 a\ \texttt{and}\ b 中的一个整数插入到 S 中。你需要判断是否可以通过不超过 70 次操作使得 x\in S,若可以,你还需要给出一种合法的操作过程。
其中,a\ \texttt{or}\ b 指 a 和 b 的按位或,a\oplus b 指 a 和 b 的按位异或,a\ \texttt{and}\ b 指 a 和 b 的按位与。
输入格式Input
第一行两个整数 n,x(1\le n\le 10^5,0\le x< 2^{30})。
第二行 n 个整数 a_1,a_2,\ldots ,a_n(0\le a_i< 2^{30}),表示最初 S 中的元素,保证这些整数两两不同。
输出格式Output
若无法通过不超过 70 次操作使得 x\in S,输出一行一个整数 -1。
否则,第一行输出一个整数 k(0\le k\le 70),表示操作次数。
接下来 k 行依次输出这 k 次操作。对于每次操作输出一行三个整数 t,a,b(t\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 S 且 b\in S。
本题中,你不需要最小化操作次数,如有多个满足条件的操作方案,输出任意一个均可。
样例Sample
提示Hint
-