zoukankan      html  css  js  c++  java
  • hdu4825 Xor Sum

    找两个异或和最大的数
    很容易想到trie树维护二进制

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    typedef long long ll;
    struct Node{
    	ll son[2], idd;
    	bool hav[2];
    	Node(){
    		son[0] = son[1] = idd = hav[1] = hav[0] = false;
    	}
    }trie[3500005];
    int T, n, m, cnt;
    ll tmp;
    void ins(ll uu, ll id){
    	ll u=0;
    	for(int i=32; i>=0; i--){
    		ll ss=(uu&(1ll<<i))>0;
    		if(!trie[u].hav[ss]){
    			trie[u].hav[ss] = true;
    			trie[u].son[ss] = ++cnt;
    		}
    		u = trie[u].son[ss];
    	}
    	trie[u].idd = id;
    }
    ll sol(ll uu){
    	ll re=0, u=0;
    	for(int i=32; i>=0; i--){
    		ll ss=(uu&(1ll<<i))>0;
    		if(ss){
    			if(trie[u].hav[0])	u = trie[u].son[0];
    			else				u = trie[u].son[1];
    		}
    		else{
    			if(trie[u].hav[1])	re |= 1<<i, u = trie[u].son[1];
    			else				u = trie[u].son[0];
    		}
    	}
    	return trie[u].idd;
    }
    int main(){
    	cin>>T;
    	for(int ii=1; ii<=T; ii++){
    		printf("Case #%d:
    ", ii);
    		cnt = 0;
    		memset(trie, 0, sizeof(trie));
    		scanf("%d %d", &n, &m);
    		for(int i=1; i<=n; i++){
    			scanf("%lld", &tmp);
    			ins(tmp, tmp);
    		}
    		while(m--){
    			scanf("%lld", &tmp);
    			printf("%lld
    ", sol(tmp));
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    UVA 10056 What is the Probability ?
    Reporting Services Report 带参数
    頁面刷新後,滾動條位置保持不變
    use this as the default and do not ask again
    JQuery Tab 滑动们导航菜单效果
    poj3256
    poj2060
    poj3280
    poj3261
    poj2135
  • 原文地址:https://www.cnblogs.com/poorpool/p/7930596.html
Copyright © 2011-2022 走看看