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;
    }
    
  • 相关阅读:
    yml 配置文件注入
    STS 自动生成 getter 和 setter
    maven build 失败
    navicat 使用
    STS 设置 注解提示
    windows下安装Mysql
    安装 mysql
    用Navicat Premium 操作MySQL数据库
    渐变显示渐变消失的BackgroundView
    基于dispatch_after封装YXTimer
  • 原文地址:https://www.cnblogs.com/poorpool/p/7930596.html
Copyright © 2011-2022 走看看