題意:給你兩個陣列a和b,讓你安排a和b的順序使得a陣列與b陣列一一對應得到的異或陣列c字典序最小
思路:建01字典樹暴力跑最優匹配即可,借鑑標程思想寫了乙份ac**,將兩個數組建到一顆字典樹上,用num陣列維護當前節點是否可用,這樣便使得刪除操作非常容易實現,在匹配的時候利用dfs的性質去暴力匹配即可,複雜度nlogn
**如下:
#includeusing namespace std;
const int maxn=1e5+5;
int tree[31*maxn][2];
int a[maxn],b[maxn];
int num[31*maxn][2];
int cnt;
vectorans;
void insert(int x,int d)
}int get()
}bool dfs(int x,int d,int pre)
if(dfs(y,d^1,x))
return false;
}}int main()
for(int i=1;i<=n;i++)
while(ans.size()sort(ans.begin(),ans.end());
for(int i=0;iprintf("\n");
for(int i=0;i<=cnt;i++)
tree[i][0]=tree[i][1]=0;
}return 0;
}
hdu 1251 字典樹入門
ignatius最近遇到乙個難題,老師交給他很多單詞 只有小寫字母組成,不會有重複的單詞出現 現在老師要他統計出以某個字串為字首的單詞數量 單詞本身也是自己的字首 input 輸入資料的第一部分是一張單詞表,每行乙個單詞,單詞的長度不超過10,它們代表的是老師交給ignatius統計的單詞,乙個空行...
HDU1251字典樹模板
problem description ignatius最近遇到乙個難題,老師交給他很多單詞 只有小寫字母組成,不會有重複的單詞出現 現在老師要他統計出以某個字串為字首的單詞數量 單詞本身也是自己的字首 input 輸入資料的第一部分是一張單詞表,每行乙個單詞,單詞的長度不超過10,它們代表的是老師...
HDU 1251 字典樹 入門
ignatius最近遇到乙個難題,老師交給他很多單詞 只有小寫字母組成,不會有重複的單詞出現 現在老師要他統計出以某個字串為字首的單詞數量 單詞本身也是自己的字首 input 輸入資料的第一部分是一張單詞表,每行乙個單詞,單詞的長度不超過10,它們代表的是老師交給ignatius統計的單詞,乙個空行...