【题目描述】
胖子班长某天突然决定再一次整一整阿甘,但他又不想太过明显的和阿甘过不去,于是他命令所有的军人站到舒适的A操场并从1-N编号,胖子班长有一张纸,纸上共M行,每行有一个数字代表一个军人的编号,胖子班长从第一行开始念出这些数字,听到自己编号的军人需要从A操场转移到烈日炎炎的B操场,如果他已经在B操场了,就从B操场回到舒适的A操场。胖子班长当然不想让其他人曝晒在烈日之下,所以在所有数字念完之后,只有倒霉的阿甘在B操场曝晒。
是时候帮助受欺负的阿甘了,但是你不知道阿甘的编号,但是你已经偷到了胖子班长的纸条,请根据纸条上的信息确定阿甘的编号。
【输入格式】
第一行是两个整数N和M,代表一共有多少军人和纸上有多少行数字,接下来有M行,每行一个数字Ti代表一个军人的编号。
【输出格式】
输出一个编号代表阿甘的编号。
【样例输入】
4 7
1
2
3
2
3
1
4
【样例输出】
4
【数据规模】
对于60%的数据,N<=1,000,000 M<=1, 000,000
对于100%的数据,N<=1,000,000,000 M<5,000,000 Ti<=N
对于后4组数据,时限为2秒,前6组数据时限为1秒。
内存限制 8M
一看内存8M 10亿的数据瞬间跪烂XPF大神了
其实题目很简单 给你10亿个数字 找出其中出现1次的数字
由于a^b^b=a
所以偶数次的数都被异或掉了
每读一个异或一次
最后的结果就是出现1次的那个数了
#include<iostream>
#include<cstdio>
#include<cctype>
using namespace std;
int m,a,b,z;
inline int readint()
{
char c=getchar();
while(!isdigit(c))c=getchar();
int x=0;
while(isdigit(c))
{
x=x*10+c-'0';
c=getchar();
}
return x;
}
int main()
{
freopen("agan.in","r",stdin);freopen("agan.out","w",stdout);
m=readint();m=readint();
z=readint();
for(a=2;a<=m;a++)
{
b=readint();
z^=b;
}
printf("%d\n",z);
return 0;
}