社区讨论

关于昨天 CF 的 F题

学术版参与者 3已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@lo236cr7
此快照首次捕获于
2023/10/23 07:14
2 年前
此快照最后确认于
2023/11/03 07:35
2 年前
查看原帖
我赛时写了一个比较神奇的做法
CPP
#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;
}
这个做法是否正确?如何证明?

回复

6 条回复,欢迎继续交流。

正在加载回复...