1. 程式人生 > 其它 >ARC124 B - XOR Matching 2(思維)

ARC124 B - XOR Matching 2(思維)

目錄

Description

尋找 x,使得存在一種排列 $a[i] ;XOR ; b[i] =x,(1<=i<=n) $,輸出所有滿足的 x

State

\(1<=a[i],b[i]<=2^{30}\)

\(1<=n<=2000\)

Input

3
1 2 3
6 4 7

Output

1
5

Solution

資料範圍並不是很大,\(x=a[1] \ XOR \; b[i]\),這樣列舉所有可能滿足條件的 \(x\) 值,然後逐一判斷,所以內層的複雜度最大隻能是 \(O(nlogn)\)

既然知道了 \(x\) 的值,每一個 \(i\) 對應的 \(x \; XOR \; a[i]\) 都會對應一個 \(b[j]\),利用桶 \(O(n)\) 就可以了

Code

const int N = 2e5 + 5;

    ll n, m, _;
    int i, j, k;
    ll a[N];
    ll b[N];
    map<int, int> mp;

signed main()
{
    //IOS;
    while(~ sd(n)){
        rep(i, 1, n){
            sd(a[i]);
            mp[a[i]] ++;
        }
        vector<int> res, ans;
        rep(i, 1, n){
            sd(b[i]);
            res.pb(b[i] ^ a[1]);
        }
        sort(res.begin(), res.end());
        res.erase(unique(res.begin(), res.end()), res.end());
        for(auto it : res){
            map<int, int> num = mp;
            int ok = 1;
            rep(i, 1, n){
                num[it ^ b[i]] --;
                if(num[it ^ b[i]] < 0){
                    ok = 0;
                    break;
                }
            }
            if(ok){
                ans.pb(it);
            }
        }
        pd(ans.size());
        for(auto it : ans){
            pd(it);
        }
    }
    return 0;
}