Codeforces Round #647 (Div. 2)B题(暴力模拟)

地址:http://codeforces.com/contest/1362/problem/B

题意:

找出最小k,去^ a[]里的每个值,使得a[]不变(可变顺序)

解析:

异或^:同为0,异为1

数据很小,直接暴力即可

map来判定是否相同,每次^完毕以后,用map记录出现次数判定一遍即可。

#include <cstdio>
#include<map>
#include<iostream>
using namespace std;
typedef long long ll;
const int maxn=1200;
int a[maxn];
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        map<int,int>m1;
        for(int i=1;i<=n;i++)
        {
            cin>>a[i];
            m1[a[i]]++;
        }int ok =0;
        for(int i=1;i<=1024;i++)
        {
            map<int,int>m2;
            for(int j=1;j<=n;j++)
            {
                int md=a[j]^i;
                m2[md]++;
            }
            int ok1=0;
            for(int j=1;j<=n;j++)
            {
                if(m1[a[j]]!=m2[a[j]])
                {
                    ok1=1;break;
                }
            }
            if(!ok1)
            {
                cout<<i<<endl;ok=1;break;
            }
        }
        if(!ok)
            cout<<"-1"<<endl;
    }
}
原文地址:https://www.cnblogs.com/liyexin/p/13051280.html