COJ 1216 異或最大值 01字典樹

2022-03-06 20:02:33 字數 647 閱讀 3281

題意:求n個非負數中任意2個的異或值的最大值。n數量級為10^5

分析:直接暴力肯定超時了。乙個非負整數可以看成1個32位的01字串,n個數可以看成n個字串,因此可以建立字典樹,建好樹後,對於任意非負整數x,可以沿著樹根往下貪心找到y,使得x異或y最大,複雜度為樹的深度。

view code

#include #include 

#define max(a,b) ((a)>(b)?(a):(b))

#define node 3200010

#define n 100010

intn;

intv[n];

intnode;

int next[node][2

];int

end[node];

void add(int cur,int

k)int cal(int

x)

return (x^end[cur]);

}int

main()

end[cur]=x;

}for(ans=i=0;imax(ans,cal(v[i]));

printf(

"%d\n

",ans);

}return0;

}

CSU 1216(異或最大值)

csu 1216 題目簡述 經典題目,求乙個陣列中兩個數異或運算的最大值。題目極其簡單,但是要求的複雜度需要達到o n log n 還是比較難的。解題思路 總的思路就是構建一棵0 1字典樹,然後乙個數讓查詢乙個與其異或結果最大的數的效率達到o log n 這裡因為異或的特殊性質,可以使用貪心法則來實...

csu 1216 異或最大值

time limit 2 sec memory limit 128 mb submitted 836 solved 300 給定一些數,求這些數中兩個數的異或值最大的那個值 多組資料。第一行為數字個數n,1 n 10 5。接下來n行每行乙個32位有符號非負整數。任意兩數最大異或值 337 9 14 ...

CSU 1216 異或最大值

題目簡述 經典題目,求乙個陣列中兩個數異或運算的最大值。題目極其簡單,但是要求的複雜度需要達到o n log n 還是比較難的。解題思路 總的思路就是構建一棵0 1字典樹,然後乙個數讓查詢乙個與其異或結果最大的數的效率達到o log n 這裡因為異或的特殊性質,可以使用貪心法則來實現。1 0 1字典...