CF1682B AND Sorting 题解

发布时间 2023-08-04 21:46:54作者: Dreamer_Boy

首先,我们按照题意,可以用 0 来作为中间的一个数来交换其他两个数,这种元素肯定是有的,那就是所有不在正确位置上的所有数的 AND 值,我们可以开一个数组 a 来模拟这个过程,a_i & a_j = X,那这里的 X 就起到我们的 0 的作用了。

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 2e5 + 10;
int a[N];
int T, n;
int main() {
    cin >> T;
    while(T--) {
        cin >> n;
        int ans = INT_MIN;
        for(int i = 0 ;i < n;i ++ ){
            cin >> a[i];
            if(ans == INT_MIN && a[i] != i) ans = a[i];
            else if(a[i] != i) ans &= a[i];
        }
        cout << max(0, ans) << endl;
    }
    return 0;
}