日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hdu4825 字典树 + 贪心

發(fā)布時間:2025/6/17 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu4825 字典树 + 贪心 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:
? ? ? 給你n個數(shù),然后給你m組詢問,每組詢問給你一個數(shù),輸出n個數(shù)中與該數(shù)亦或
的最大的那個數(shù),輸出的是被亦或的那個數(shù),不是亦或后的結(jié)果。


思路:
? ? ? 我用的是字典樹+貪心,首先我們可以把前n個數(shù)拆成2進制,然后補全前導(dǎo)0,

我是補成了34位,然后把他存在字典樹中,對于每個詢問,把他變成二進制,然后補全前導(dǎo)0,然后在把每一位都取反,在字典樹上查找,查找的時候用貪心的思想,因為前面的是高位,所以相等就走相等的,不行再走不相等的那個,反正都是34位,怎么走都有路,一直找到最后,在某一位上如果當前這一位一樣了,那么sum += 當前這一位的權(quán)值(2^**),然后return sum,輸出的時候不能直接輸出sum求的是被異或的那個值,所以輸出 sum ^ num,根據(jù)的是 a ^ b ^ a = b,還有一點要注意的就是一開始超時了,后來把 %2 改成 &1就400+ ms AC了.


#include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct Tree {Tree *next[2]; }Tree;Tree root;void Buid_Tree(char *str) {int len = 34;Tree *p = &root ,*q;for(int i = 0 ;i < len ;i ++){int id = str[i] - '0';if(p -> next[id] == NULL){q = (Tree *) malloc(sizeof(root));for(int j = 0 ;j < 2 ;j ++)q -> next[j] = NULL;p ->next[id] = q;p = p -> next[id];}else p = p -> next[id];} }__int64 Find(char *str) {int len = 34;Tree *p = &root;__int64 K = 2;K <<= 32;__int64 sum = 0;for(int i = 0 ;i < len ;i ++){int id = str[i] - '0';if(p -> next[id] == NULL)p = p -> next[id ^ 1];else{p = p -> next[id];sum += K;}K = K / 2;}return sum; }void get_str(char *str ,__int64 num) {int t = 34;str[t] = '\0';while(num){str[--t] = (num & 1) + '0';num >>= 1;}for(int i = t - 1 ;i >= 0 ;i --)str[i] = '0'; }int main () {int i ,t ,n ,m ,cas = 1;__int64 num;char str[50];scanf("%d" ,&t);while(t--){scanf("%d %d" ,&n ,&m);root.next[0] = root.next[1] = NULL;while(n--){scanf("%I64d" ,&num);get_str(str ,num);Buid_Tree(str);}printf("Case #%d:\n" ,cas ++);while(m--){scanf("%I64d" ,&num);get_str(str ,num);for(i = 0 ;i < 34 ;i ++)if(str[i] == '1') str[i] = '0';else str[i] = '1';printf("%I64d\n" ,Find(str) ^ num);}}return 0; }

總結(jié)

以上是生活随笔為你收集整理的hdu4825 字典树 + 贪心的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。