我赛时写了一个比较神奇的做法
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
int tt;
cin >> tt;
while (tt--) {
int n, k;
cin >> n >> k;
vector<pair<int, int> > a(n);
for (int i = 0; i < n; i++) cin >> a[i].first;
for (int i = 0; i < n; i++) a[i].second = i + 1;
sort(a.begin(), a.end());
vector<pair<int, int> > sk;
for (int i = 0; i < n - 1; i++)
sk.push_back(make_pair(a[i].first ^ a[i + 1].first, i));
sort(sk.begin(), sk.end());
cout << a[sk[0].second].second << " " << a[sk[0].second + 1].second << " " <<
(((1 << k) - 1) ^ (a[sk[0].second].first & a[sk[0].second + 1].first)) << endl;
}
return 0;
}
这个做法是否正确?如何证明?