[TRIE]一道有趣的题

[TRIE]一道有趣的题

题目大意是:给你一串正整数(可能有重复,且数字保证在int以内),再给你一个正整数k(int以内),从这串数字中找出一个数n,使得k^n(异或)最大。

先来点题外话

如何深刻理解异或呢?男的和女的能生出孩子,否则就不行。(自动忽略同或)

思路

每个数字都是没有规律的,显然就只能暴力了。那么如何优雅地暴力呢?首先把每个数字的二进制存在一个字典树里(顺便就去重了),再将k的二进制在字典树内匹配。对于一个数的二进制,从高位到低位相反的位越多越好。比如101001,与它相异或最大的数当然是010110。所以在字典树里匹配的时候,有相反的尽量找相反的。

猜你喜欢

转载自blog.csdn.net/arliastark/article/details/80308150