本文共 2122 字,大约阅读时间需要 7 分钟。
????????????????????????????????????????????????????????????????????????????????
????????????Trie????????????Trie?????????????????????????1????????????????????????????????Trie??????????????????
???????
import java.io.*;import java.lang.Integer;class Main { static int N = 3000010; // ??N???1000000 static int[][] t = new int[N][2]; static int idx = 0; static void insert(int num) { int p = 0; for (int x = 30; x >= 0; --x) { int c = (num >> x) & 1; if (t[p][c] == 0) { t[p][c] = ++idx; } p = t[p][c]; } } static int compare(int num) { int p = 0; int max = 0; for (int x = 30; x >= 0; --x) { int c = (num >> x) & 1; if (t[p][1 - c] == 0) { max = (max << 1) | 1; p = t[p][c]; } else { max = (max << 1) | 0; p = t[p][c]; } } return max; } public static void main(String[] args) throws Exception { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter buw = new BufferedWriter(new OutputStreamWriter(System.out)); int n = Integer.valueOf(buf.readLine()); String[] params = buf.readLine().split(" "); for (int i = 0; i < n; ++i) { int num = Integer.valueOf(params[i]); insert(num); } int max = 0; for (int i = 0; i < n; ++i) { int num = Integer.valueOf(params[i]); int m = compare(num); if (m > max) { max = m; } } buw.write(max + ""); buw.flush(); buf.close(); buw.close(); }} t???Trie??????????????????????0?1?insert?????????Trie?????????????????????????????compare???????Trie?????????????????????main????????????Trie??????????????????????????????O(N)??????????????????
转载地址:http://rkre.baihongyu.com/