懒猫--按位异或

来源:cf
yayamao是只很笨的猫。它只认识偶数,它认为成双成对才是完美的。所以对于yayamao来说偶数是可数的,奇数是不可数的。另外,yayamao它总是想写乱七八糟的问题,可是自己又很笨,不会做。这不,这只傻猫又出了道乱七八糟的题目,只能请教你们来做做喽。yayamao面前有N个食物,每一个食物都有一种代号V。现在yayamao要开始整理这么多吃的东东了,就是说yayamao想要统计同一种食物一共有多少个。同时yayamao被告知这N个食物中仅有两种食物是不可数的。yayamao的目的很简单,能不能帮他找出这两种不可数的食物?很简单吧?是不是认为yayamao很笨啊?这么简单都不会,还等什么呢?Kill it in seconds...

Input

第一行一个T(1<=T<=10),代表有T组测试数据。每组数据的第一行是一个N(N<=10^6),代表yayamao面前有N个食物。接下来的一行有N个整数,第i个整数代表第i个食物的种类代号V[i]  (0<=V[i]<2^64)

Output

每组数据输出两个数A和B,A<B, 表示A,B两种食物是不可数的。A,B中间隔一个空格,行末要换行。

Sample Input

2
10
1 1 1 2 2 2 3 3 4 4
20
0 1 0 1 2 3 4 2 3 4 65535 65535 65535 789456123 789456123 789456123 10 10 10 10

Sample Output

1 2
65535 789456123
#include<stdio.h>
#include<algorithm>
using namespace std;
__int64 a[1000005];
int main()
{
    int n,m,i;
    __int64 s,t,k,p;
    scanf("%d",&n);
    while(n--)
    {
        scanf("%d",&m);
        s=0;
        for(i=0;i<m;i++)
        {
            scanf("%I64d",&a[i]);
            s^=a[i];
        }
        t=s;
        k=t;
        int j=-1;
        while(k)
        {
            int p=k%2;
            j++;
            if(p==1) break;
            k/=2;
        }
        for(i=0;i<m;i++)
        {
            if(a[i]>>j&1)
            s^=a[i];
        }
        t^=s;
        printf("%I64d %I64d\n",min(t,s),max(t,s));
    }
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值