1. 程式人生 > >2014百度之星資格賽解題報告:Xor Sum

2014百度之星資格賽解題報告:Xor Sum

#include <iostream>
#include <cstdio>
#include <cstdlib>
#define LENGTH 32
#define MAXN 100000
using namespace std;
typedef struct node{
        node *next[2];
        bool flag;
};

node Head;
node arr[LENGTH * MAXN];
int nodeCount;

node *GetNewNode(){
        if (nodeCount >= LENGTH * MAXN) {
                printf("ERROR : node count full!");
                exit(1);
        }
        arr[nodeCount].next[0] = NULL;
        arr[nodeCount].next[1] = NULL;
        arr[nodeCount].flag    = false;
        return &(arr[nodeCount++]);
}

void Init(){
        nodeCount = 0;
        Head.next[0] = NULL;
        Head.next[1] = NULL;
        Head.flag    = false;
}

void insertNode(unsigned int num){
        node *p = &Head;
        int temp;
        for (int i = LENGTH - 1; i>=0; i--){
                if (((1<<i)&num) != 0){
                        temp = 1;
                } else {
                        temp = 0;
                }
                
                if (p->next[temp] == NULL){
                        p->next[temp] = GetNewNode();
                }
                
                p = p->next[temp];
        }
        p->flag = true;
}

unsigned int searchNode(unsigned int s){
        unsigned int k;
        node *p = &Head;
        int temp;
        k = 0;
        for (int i = LENGTH - 1; i>=0 ;i--){
                if (((1<<i)&s) != 0){
                        temp = 0;
                } else {
                        temp = 1;
                }
                
                if (p->next[temp] == NULL){
                        k = (k << 1) + (temp ^ 1);
                        p = p->next[temp ^ 1];
                } else {
                        k = (k << 1) + temp;
                        p = p->next[temp];
                }
        }
        return k;
}

int main(){
        int n , m ;
        unsigned int k , s;
        Init();
        int case_count = 0;
        scanf("%d", &case_count);
        int case_index = 0;
        while ((case_count--) && scanf("%d%d" , &n , &m) != EOF){
                case_index++;
                printf("Case #%d:\n", case_index);
                Init();
                for (int i = 0; i < n; i++){
                        scanf("%u",&k);
                        insertNode(k);
                }
                for (int i = 0; i < m; i++){
                        scanf("%u" , &s);
                        k = searchNode(s);
                        printf("%u\n" , k);
                }
        }
        return 0;
}


相關推薦

2014資格賽解題報告Xor Sum

#include <iostream> #include <cstdio> #include <cstdlib> #define LENGTH 32 #define MAXN 100000 using namespace std; typedef struct node{

資格賽,hdu 4825 XOR SUM

顯然是要建一棵0、1樹 其實很簡單就是二叉樹,只不過為了操作簡便,即程式的速度,所以就採用靜態樹,即不動態分配記憶體,使用較大的全域性陣列。0是根節點 #include<cstdio>

2014資格賽題解

.cn -i lan while pro acm 起點 pos con 比賽鏈接:點擊打開鏈接 ,,杭電把比賽關了代碼都找不到了。。 無責任民科還是mark一下好了。。 HDU 4823 Energy Conversion 把式子變換一下發現是一個等比數列,高速冪就可以

2014資格賽第三題

字符串 struct uri hit other printf 能夠 ava 單獨 Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others

2014資格賽4題

歐幾裏得 font define ria min read span post eight 因為都是中文題。題意就不寫了。 A、Energy Conversion 這題先推斷一下能量能否添加,然後再依據添加這個公式去求出一個等比公式。就能夠直接求出須

2014資格賽——XOR SUM

#include<cstdio> #include<cstdlib> #include<iostream> #define LL long long using namespace std; LL power[32]; typedef struct TrieNode

ACM-資格賽Energy Conversion——hdu4823

ios break get enter span bmi ria hint -c Energy Conversion Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Jav

2014 1003 題解 Xor Sum

dsm xor 難題 ane rac pro 數據包 20px weight Xor Sum Problem Description Zeus 和 Prometheus 做了一個遊戲,Prometheus 給 Zeus 一個集合,集合中包括了N個正整數,隨後 P

2017資格賽 1003度度熊與邪惡大魔王(DP)

solution nav normal ner 就會 預處理 display badge rate 度度熊與邪惡大魔王 Accepts: 3021 Submissions: 18787 Time Limit: 2000/1000 MS (Java/Ot

2017資格賽 1003 度度熊與邪惡大魔王 背包DP

log accep 防禦 ssi str 完全背包 time 怪物 amp 度度熊與邪惡大魔王 Accepts: 3027 Submissions: 18837 Time Limit: 2000/1000 MS (Java/Others) Memor

度度熊的午飯時光 2017資格賽 -.-

set others spa 字典序 info iostream 最小 long long 預算 度度熊的午飯時光 Accepts: 755 Submissions: 8737 Time Limit: 2000/1000 MS (Java/Others)

2017 資格賽 題解

真心 數據 targe 比較 blog png 防禦 href 普通 百度之星 2017 資格賽 題解(原創)(2~5題 第一題方法是錯的 第二題數據太水 並不會正解) 轉載請註明出處http://www.cnblogs.com/nflslzt/p/7302377.html

2014初賽第一場部分題解

ref 連接 又是 百度之星 虛擬 子節點 get content trac 代碼太醜就不貼了。,又是一篇無責任民科的題解。。 HDU 4828 Grids 看了一下跟卡特蘭數差點兒相同就猜了一下,詳細為啥我也不知道。。然後有除法套個逆元。。 HDU 4830

【2018資格賽】 A 問卷調查 - 位運算&動規

blog 題目 相同 clas 方程 數組 cstring div col 題目地址:http://bestcoder.hdu.edu.cn/contests/contest_showproblem.php?cid=820&pid=1001 參考博客:在此感謝ht

2018資格賽 1001調查問卷(狀壓dp)

百度之星 一行 problem nts 數據 output 兩張 href bestcode 調查問卷 Accepts: 1289 Submissions: 5642 Time Limit: 6500/6000 MS (Java/Others

2018 資格賽 1001 調查問卷

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=6344 題意:給n份問卷,每個問卷m道題,每題只有A,B兩種選項,問存在多少個問題集合,使得只保留這些問題後至少k對卷子不同。  題解:剛開始做的時候,沒有什麼思路,因為要求至少K對

2018資格賽___1001調查問卷——狀態壓縮

補題連結:傳送門 題目大意:   有TTT組樣例,nnn份問卷,每份問卷有mmm個問題,答案由A或B組成(相當於nnn條長度為mmm的01序列),在這mmm個問題中任意選取一部分,要使這新的零散問卷互不相同,且至少有k對,問這樣選取一共有多少種方案??? 解題思

2017資格賽題解

度度熊為了拯救可愛的公主,於是與邪惡大魔王戰鬥起來。 邪惡大魔王的麾下有n個怪獸,每個怪獸有a[i]的生命值,以及b[i]的防禦力。 度度熊一共擁有m種攻擊方式,第i種攻擊方式,需要消耗k[i]的晶石,造成p[i]點傷害。 當然,如果度度熊使用第i個技能打在第j個怪獸上面的話,會使得第j個怪獸的生命值減少p

2016 資格賽ABCDE

A.題意:定義小寫字母組成的字串的雜湊值,為(單個字母的ASCII碼減去28)的乘積。給出長度最多為100000的字串和最多1000次詢問,每次詢問[L,R]之間的字串的雜湊值。 題解: 有多種做法。 1.逆元  2.線段樹  3.分塊陣列 1.逆元做法:因為每次求區間[L,R]乘積,可以

資格賽】F:百科蝌蚪團

時間限制: 1000ms 記憶體限制: 65536kB 描述 百度百科有一支神奇的隊伍,他們叫自己“百科蝌蚪團”。為了更好的讓蝌蚪團的成員們安排工作,百度百科的運營團隊定出了一個24小時制的時間表。例如: 1. 每個蝌蚪團成員工作時長相同; 2. 必須安排蝌蚪團成員在