害 惭愧惭愧 老长时间没写代码了——————————
转回正题 ,对于杭电这个题 先说我超时的错误想法
——————————————————————————————————————————————————————————————
一开始我的想法是开一个大小为1000000的数组。然后每当输入一个数字 m 时,我会让a[m]++;并且处理完一串数字时,需要将数组a在初始化为零。
嘶~~~ 其实想想感觉这样写就很复杂。果然最后也没过。
——————————————————————————————————————————————————————————————
接下来说正解(看了某大佬的做法)
对了,要先知道一个数字他异或两次别的数,其值本身不变。(比如 a = 2; b = 3; c = 4; a = a^b^c^b^c; 结果a还是2)
知道了这个咱们就能写代码了。代码如下:
#include<iostream> #include<cstring> using namespace std; //using namespace std; #define N 1000000 int a[N]; int main() { int n; int m; int p; while(scanf("%d",&n) != EOF,n) { scanf("%d",&m); for(int i = 0;i < n-1;i++){ scanf("%d",&p); m = m^p; } printf("%d\n",m); } return 0; }
然后还要再啰嗦一句 ,输入和输出不能用(cin和cout)不然会超时。
最后这道题就结束了~~~~
加油呀 小灰灰!!!!!!!!!!!!!!!!!!!!