CF1013B And
题目描述
给定一个包含 $n$ 个元素的数组 $a_{1},a_{2},...,a_{n}$ 和一个数 $x$。
每次操作,你可以选择某个 $i$($1 \leq i \leq n$),并将 $a_{i}$ 替换为 $a_{i} \& x$,其中 $\&$ 表示[按位与](https://en.wikipedia.org/wiki/Bitwise_operation#AND)运算。
你希望经过若干次操作(也可以不操作)后,数组中至少有两个相等的元素。换句话说,存在至少两个不同的下标 $i \ne j$,使得 $a_{i} = a_{j}$。请判断是否有可能实现,并在可能的情况下求出所需操作次数的最小值。
输入格式
第一行包含两个整数 $n$ 和 $x$($2 \leq n \leq 100000$,$1 \leq x \leq 100000$),分别表示数组的元素个数和进行按位与操作的数。
第二行包含 $n$ 个整数 $a_{i}$($1 \leq a_{i} \leq 100000$),表示数组的元素。
输出格式
输出一个整数,表示所需的最小操作次数。如果无法实现,输出 $-1$。
说明/提示
在第一个样例中,可以对数组最后一个元素进行操作,将 $7$ 变为 $3$,这样只需一次操作即可达到目标。
在第二个样例中,数组中已经有两个相等的元素。
在第三个样例中,进行操作不会改变数组,因此无法使某一对元素相等。
由 ChatGPT 4.1 翻译