求一堆數中取出2個異或使得異或值大於某個數

2021-07-03 23:38:03 字數 622 閱讀 7982

思路 字典樹

顯然不能列舉所有的點求兩兩見的異或值, 我們知道表示為二進位制時  當兩數字不同時是其異或值才為1  ,由此可得到o(n)的演算法,

先將所有數存進字典樹中(便於快速查詢), 當用乙個數去和其他數異或時,可直接根據貪心策略(盡量選不同的數字)得到最大異或值。

**1

#includeint n,m;

struct haha

node[100005*4];

int pos;

int makend()

void _insert(int x)

int main()

return 0;

}

**2

#include #include #include using namespace std;

int a[100005];

int main()

}if(flag)

break;

}if(flag)

printf("yes\n");

else

printf("no\n");

}return 0;

}

找出一堆數中個數超過一半的數

問題描述 一堆數 例如6,2,2,6,3,4,6,6,6,6 總共10個,其中 6 的個數超過總數的一半5,找出這個個數超過過半的那個數。思路 從頭到尾遍歷,兩個數相同接著往後遍歷 否則刪掉這兩個數,接著往後遍歷。因為所找的那個數過半,所以不同的數相抵,抵消掉最後還會至少剩下乙個那個要找的數。圖示 ...

一堆數裡邊只有乙個出現奇數次的數,其他都出現偶數次

這是我們乙個學長出的一道題,說一堆數裡邊只有乙個出現奇數次的數,其他都出現偶數次 讓你用時間複雜度為on的演算法找出這個數。我看到的乙個簡單的方法是 開始定義乙個a 0,每輸入乙個數就跟a異或,即a a n 假設輸入數的變數是n 這樣最後得到的a就是出現奇數次的那個數 仔細想想確實是這樣,異或 相同...

求一堆數中出現次數最多的那個數的次數

時間限制 2 sec 記憶體限制 128 mib special judge no 提交 170 答案正確 28 提交狀態 我的提交 討論區 恭喜南陽理工學院獲得全國最佳生態校園。南陽理工學院最近又上新聞了,全國遊客紛紛慕名而來,但是南陽理工學院可不能隨便進,因為裡面有獅子和柿子。除了獅子,南陽理工...