题目算法原理:
1. 3vs3每位选手的最终排表只能是1vs1
2. 根据题目描述可以建立一个配对信息表,既A:YZ,B:XYZ,C:Y 这样的一对多映射关系表
3. 为了方便检测,采用二进制bit 来编码这个映射表
4. 规定A,B,C对应序号0,1,2 而对应的比特编码为1,2,4(注: 1<<0, 1<<1, 1<<2, 二进制为:001,010,100)
5. 规定 X,Y,Z同上
6. 计算得映射表pairMask为A:6,B:7,C:2(二进制为:110,111, 010)
7. 循环搜索ABC对应的对手,因为最后只能是1vs1且题目已说C只有唯一对手所以采用逐次排除法。而在一次搜索循环中,符合配对的条件就是映射表中的数字编码为2幂。映射表序号即为XYZ对手序号。选出以后,再将映射表中所有元素都消除掉这个编码位然后继续下一个搜索过程
8. 例:搜索到c(序号为2)的对手为Y(映射表pairMask[2]二进制为: 010,是一个2幂数,1所在的位置序号为1,也就是Y的序号),然后消除掉这个Y的编码,映射表变为pairMask=4,6,0。下一个搜索循环就会找到4,对应的就是 A(0):Z(2)。