whu新生赛:异或的加法逆元

题面:

时间限制: 2000/1000 MS (Java/Others)    内存限制: 2048/1024 K (Java/Others) Special Judge: 无
 
问题描述
小仓鼠是武汉仓鼠大学(Wuhan Hamster University, WHU)的一名单身学生,当然, 武汉仓鼠大学还有千千万万与他情感状态相同的仓鼠,为了他们的鼠生幸福,学校每年都会 举行一次契约情侣活动来帮助那些需要帮助的小鼠们。 在配对环节,每一只鼠都会拿到一个匹配程序给定的编号,编号的范围在 0~3 × 1010 之间。拿到了相同编号的两只仓鼠会喜结鼠对,所以正常情况下所有编号的出现次数都应该 是偶数才对。 然而,今年的活动由于报名鼠数太多等种种原因,出现了许多意外,比如三只鼠被配对 给同一只鼠之类的大问题。不过,在这样那样的事后措施启动后,大部分锅都被补好,只剩 下最后一个问题:还是存在一个编号被分配给了奇数只仓鼠,这必然会导致拿到这个编号的 某一只仓鼠落单。小仓鼠不希望自己会被分配到那个有落单可能的编号,作为学生会内部的 高级会员,他成功黑到了所有仓鼠对应的编号,但报名的仓鼠实在有些多,以至他一时竟无 法找出那个对应奇数个仓鼠的编号,现在卑微的他只能求助于你。事关小仓鼠的鼠生幸福, 请务必搞快点。
输入格式
第一行输入一个正整数 n,表示报名仓鼠数量。(1 ≤ 𝑛 ≤ 3 × 105,并且 n 一定为奇数)
 第二行包含 n 个编号,每个编号都是 0~3 × 1010 之间的数字,以空格隔开。保证有且 只有一个数字出现了奇数次

 

 

题解:空间限制卡的十分严格,桶是一看就不行,3x1010分明就是要卡你桶,后来想去离散化,把数字哈希得密集一点但没成功,最后写了个堆(左<父<右)还是被卡住了QWQ,3x105的那个3应该就是卡堆或者链表之类的数据结构用的!

正解思路在于:异或运算的加法逆元是它自己!即,你将一个数异或它自己就等于零!这样,我们一开始就可以用零不停的异或读入进来的数字,读入了偶数个的数字都消掉了,最后剩下那个落单的。

posted @ 2019-12-08 23:27  工程1  阅读(286)  评论(0)    收藏  举报