码迷,mamicode.com
首页 > 其他好文 > 详细

ACM 寻找众多情侣堆中的两个基佬

时间:2014-12-13 13:32:33      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   sp   for   strong   on   问题   bs   

题目描述
When Wodex is running in his village to live down, He fainted by fumes. Fortunately, a mysterious man saved him...

Ten years later, he learned some skills from the mysterious man and have knowed who was personal enemy, just named Zero. So, he embarked on a journey of revenge.
But before it, the mysterious man wanted to test him.
Problem comes. The mysterious man prapared a maze where hided a brave sword. To get it, Wodex came in the maze.

There were many keys in the maze, each key had a number, only two keys can open the door to get brave sword. But there existed many keys‘ number were the same in pairs, if the number of keyA was the same as keyB, these two keys won‘t be the solution to the door. So, there would be left only last two different numbers of keys.

Can you help Wodex to find out these two keys‘ number?

输入
Input until EOF.
First line will contain an even integer N (N < 100,000) means the number of whole keys.
And next line will contain N integers. Each integer means the number of each key.

输出
What are they? Output the number of their keys from small to large.

样例输入
8
1 1 2 2 2 3 3 4
8
1 1 2 2 3 3 4 5

样例输出
2 4
4 5


分析

是不是想起了筷子大作战这一题?
那题的意思就是有很多筷子,除了其中一只,其他都是成对等长出现的。
直接异或,所有相同的数都会被抵消(异或运算中,相同位置值相等的结果为0,就是说所有成对出现的都会最终成为0),最后的结果自然是那个落单的数了。

然后,我们来看这题。
这题的意思是有很多情侣,每对情侣手握的牌号是一样的,然后在这群人中,有两个人是搞基的,他们手里握的牌子是不一样的,请找出这两个人,并从小到大输出他们的牌号。
那么问题稍微复杂了点,由一个单变成了两个单。

如果是有两个互不相同的数,我们可以把他分成两个段,段名分别为A,B。这里为了解释方便,给出10个数,分别为a,a,b,b,c,c,d,d,e,f;
 
现在我们知道,只要A段和B段能满足上面的(1)所说的情形,即两个不同的数(e,f分别在A,B段内)分别在不同的段内,其他的数成对出现在相同的段内,就可以仿照(1)得到结果。举个例子A(a,a,b,b,e);B(c,c,d,d,f);
 
是不是觉得很难分呢?怎么才能按照上面的形式分开成为A,B呢?别急,注意咯,我上面说的是其他数成对出现,并不是一定要对半分,也可以是A(a,a,b,b,c,c,d,d,e);B(f);或者A(a,a,b,b,c,c,e);B(d,d,f);是不是有点头绪了?没有?别紧张,往下看,快搞定了
 
我们先来想想如何分e,f。首先,他们本身不相等,所以e^f的值一定不为0,也就是说,e^f的值转换成2进制,一定至少有一个1出现。好的,我们从右向左找第一次出现1的位置,将所有数中,这个位置是1的放进A,是0的放进B。OK,完全符合我们对AB段的要求,再从A,B中分别异或找出e,f不是问题!

ACM 寻找众多情侣堆中的两个基佬

标签:style   io   ar   sp   for   strong   on   问题   bs   

原文地址:http://blog.csdn.net/colorwaterer/article/details/41909063

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!