采用亦或的方法有一个用例超时:
#include <stdio.h>
#include <iostream>
using
namespace
std;
#define max_length 10000
void
find(
int
arr[],
int
m)
{
int
p=0;
for
(
int
i=0;i<m;i++)
{
p^=arr[i];
}
int
t;
for
(t=1;t<=p;t<<=1)
{
if
(t&p)
break
;
}
int
a=0,b=0;
for
(
int
i=0;i<m;i++)
{
if
(t&arr[i])
{
a^=arr[i];
}
else
{
b^=arr[i];
}
}
a<=b?
printf
(
"%d %d\n"
,a,b):
printf
(
"%d %d\n"
,b,a);
}
int
main()
{
int
n;
int
array[max_length];
while
(
scanf
(
"%d"
,&n)!=EOF)
{
for
(
int
i=0;i<n;i++)
{
scanf
(
"%d"
,&array[i]);
}
find(array,n);
}
return
0;
}
/**************************************************************
Problem: 1351
User: 无梦楼主lv
Language: C++
Result: Output Limit Exceed
****************************************************************/
改用set方法测试通过:
#include <iostream>
#include <set>
#include <stdio.h>
using
namespace
std;
int
main()
{
int
n,t;
set<
int
> v;
while
(
scanf
(
"%d"
,&n)!=EOF){
for
(
int
i=0;i<n;i++)
{
scanf
(
"%d"
,&t);
if
(v.find(t)!=v.end())
{
v.erase(t);
}
else
{
v.insert(t);
}
}
printf
(
"%d %d\n"
, *v.begin(),*v.rbegin());
v.clear();
}
return
0;
}
/**************************************************************
Problem: 1351
User: 无梦楼主lv
Language: C++
Result: Accepted
Time:1000 ms
Memory:1524 kb
****************************************************************/