题目: 传送门
思路: 我们用dp[i] 表示得到i 的最小步骤 ,则 dp[i] == 0 或者 dp[i] == 1;具体操作看代码:
#include <iostream>
#include <algorithm>
using namespace std;
int a[100010];
int main() {
int n,k;
cin >> n >> k;
int ans = 6;
while(n--) {
int m;
cin >> m;
if(a[m] != 0) { //表示前面已经有方式出现过m
ans = min(ans, a[m] - 1);
}
if(a[m&k]!=0){ //同上
ans = min(ans,a[m&k]);
}
if(a[m]==0) {
a[m] = 1;
}
else {
a[m] = min(a[m],1);
}
if(a[m&k]==0) {
a[m&k] = 2;
}
else {
a[m&k] = min(a[m&k], 2);
}
}
cout << (ans==6? -1:ans) << endl;
return 0;
}