0x16 Tire之最大的異或對

2022-05-31 08:30:12 字數 680 閱讀 8755

我們考慮所有的二元組(i,j)且i我們可以把每個整數看作長度為32的二進位制01串(數值較小時在前邊補0),並且把a1~ai-1對應的32位二進位制串插入一棵trie 樹(其中最低二進位制位為葉子節點)。接下來,對於ai對應的32位二進位制串,我們在trie中進行一次與檢索類似的過程,每一步都嘗試沿著「與ai的當前位相反的字元指標」向下訪問。若與ai的當前位相反的字元指標」指向空節點,則只好訪問與ai當前位相同的字元指標。根據xor運算「相同得0,不同得1」的性質,該方法即可找出與ai做xor運算結果最大的aj。

如下圖所示,在一棵插入了2(010), 5(101), 7111)三個數的trie中,分別查詢與6(110), 3(011)做xor運算結果最大的數。(為了簡便, 圖中使用了3位二進位制數代替32位二進位制數)

#include#include#include#includeusing namespace std;

const int size=100010;

int trie[size*32+5][2], tot = 1; // 初始化,假設字串由小寫字母構成

int a[size], n, ans;

void insert(int val)

}int search(int val) else

}return ans;

}int main()

cout<}

徹底搞定0x0d和0x0a

我只在arm linux c和vc 下做了試驗,請大家在接觸其它語言環境下,小心推廣,不行就自己動手做試驗,最可靠。在arm linux c和vc 下回車換行的意義如下。回車 cr ascii碼 r 十六進製制,0x0d,回車的作用只是移動游標至該行的起始位置 換行 lf ascii碼 n 十六進製...

關於0x0d與0x0a的ASCII。

今天發現乙個有趣的現象 在 ma 我用的版本是6.11 中作彙編時發現,0x0d與0x0a有著不同的作用。比如 dead for dream 在這個字串後只加上0x0d則得到 游標移到開頭的那個d下面,而沒有換行 再輸入字元的話,將原來的字元著改掉。在這個字串上只加上0x0a則得到 游標移到末尾m字...

語言雜記 0x0A

今天寫乙個字串反轉練練手,涉及到手動輸入字串時出現了一些問題 char s scanf s s 採用字元陣列的方式輸入的時候完全沒有問題,但是採用下面的方式的時候就會報錯 核心以轉儲 char s scanf s s 什麼是核心已轉儲呢?通俗的理解就是訪問了不能訪問的內容,如下 所以我們的char ...