find the special present in the n cards (1<=n<1000000)
#include<cstdio>
#include<set>
using namespace std;
int main()
{
int n, e;
set<int> s;
while (scanf("%d", &n), n)
{
while (n--)
{
scanf("%d", &e);
if (s.find(e) == s.end())
s.insert(e);
else
s.erase(e);
}
printf("%d\n", *s.begin());
s.clear();
}
return 0;
}
借助异或的性质
int main()
{
int n, e, ans;
while (scanf("%d", &n), n)
{
// 0^n = n
// n^n = 0
ans = 0;
while (n--)
{
scanf("%d", &e);
// a^b = b^a。
// (a^b)^c = a^(b^c)
// a^b^a = b
ans ^= e;
}
printf("%d\n", ans);
}
return 0;
}