1.开灯
【题目大意】
给定T个数,如果将这T个数两两配对,最后恰好剩下一个数。问这个数是多少。
【解法一】
容易想到,先将这些数进行排序,然后从小到大进行配对。当出现有一个数无法配对的时候,这个数就是答案。 如果使用快速排序,时间复杂度为O(nlogn)。预计得分80--1 00。
【解法二】
这个解法不易想到。任何两个相同的数的异或和为0。所以求这T个数的异或和,所
有能配对上的数异或和为0,最后的结果就是那个“与众不同’’的数。
时间复杂度为0(n),而且程序比解法一还要简单。预计得分100。
【出题人的意图】
这道题就是想考查能不能想到解法二。最开始设计此题的时候,是想从文件中直接
读入T个数,但是发现输入文件实在太大了,而且读入的时间也非常大。后来就想着能不
毫读入少一点,要用程序将这T个数算出来。于是就有了这道题。
[a*t]的设计就不想让选手利用这T个数的规律从而计算出答案。笔者个人没有想到能利用此规律解题的办法,当然,如果你能想到,欢迎交流。
本题是这次模拟赛的第1题,应该定位为送分题,所以如果你能写好一个快排,就能得到80分。本来想将T开到1000万,后来觉得还是鼓励写得好的快排,所以只开到了2 00万。笔者试过,快排也可以通过所有的测试点
还有两个要注意的问题。第一,如果在求这T个数的过程中,没有用double,而用来float,会因为精度不足,失20分,第二,快排中没有使用随机,可能会退化成O(n^2),失
2 0分.