2653: 不同的数
Result | TIME Limit | MEMORY Limit | Run Times | AC Times | JUDGE |
---|---|---|---|---|---|
![]() | 3s | 65536K | 387 | 78 | Standard |
原来有n对数字,每对两个数字都相同。现在其中某对数字中的一个发生了变化。并且所有数字被打乱了顺序。求这一对数字变化后是多少。要求先输出小的。再输出大的。
Input
多组输入,每组如下:第一行一个数字n, n <= 1000000 以下2n行,每行一个数字,打乱顺序后的所有数字。 n=0表示输入结束。
Output
每组一行。两个数字。表示发生变化后的一组。
Sample Input
3 1 2 3 2 2 3 0
Sample Output
1 2
//
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
int sum0[33],sum1[33];
int main()
{
while(scanf("%d",&n)==1&&n)
{
n<<=1;
memset(sum0,0,sizeof(sum0));
memset(sum1,0,sizeof(sum1));
for(int i=0;i<n;i++)
{
int t;scanf("%d",&t);//t>0
for(int j=0;j<32;j++)
{
if(t&(1<<j)) sum1[j]^=t;
else sum0[j]^=t;
}
}
for(int i=0;i<32;i++)
{
if(sum0[i]&&sum1[i])
{
int rmax=max(sum0[i],sum1[i]);
int rmin=min(sum0[i],sum1[i]);
printf("%d %d\n",rmin,rmax);
break;
}
}
}
return 0;
}