字典树

来源:互联网 发布:js块作用域 编辑:程序博客网 时间:2024/06/04 20:14

区域赛第一场:水题

#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define INF 0x3f3f3f3f#define N 1000 + 10#define M 40000 + 10int n, a[N], top, tree[M][3], digit[M], val[M];void init(){    scanf("%d", &n);    for(int i = 0; i < n; i++) scanf("%d", a + i);    top = 1;    memset(tree[0], 0, sizeof tree[0]);    memset(val, 0, sizeof val);}void Insert(int x, int v){    int u = 0, pos = 0;    memset(digit, 0, sizeof digit);    while(x)    {        digit[pos++] = x & 1;        x >>= 1;    }    pos = 30;    reverse(digit, digit + pos);    for(int i = 0; i < pos; i++)    {        int c = digit[i];        if(!tree[u][c])        {            memset(tree[top], 0, sizeof tree[top]);            val[top] = 0;            tree[u][c] = top++;        }        u = tree[u][c];        val[u] += v;    }}int solve(int x){    int pos = 0, u = 0;    int res[40];    memset(digit, 0, sizeof digit);    while(x)    {        digit[pos++] = x & 1;        x >>= 1;    }    pos = 30;    reverse(digit, digit + pos);    for(int i = 0; i < pos; i++)    {        int c = digit[i] ^ 1;        if(val[tree[u][c]])        {            u = tree[u][c];            res[i] = c;        }        else        {            u = tree[u][c ^ 1];            res[i] = c ^ 1;        }    }    int ret = 0;    for(int i = 0; i < pos; i++) cout << res[i] << " ";    cout << endl;    for(int i = 0; i < pos; i++)        ret += res[i] * (1 << (pos - i - 1));    return ret;}int main(){    int _T;    scanf("%d", &_T);    while(_T--)    {        init();        for(int i = 0; i < n; i++)            Insert(a[i], 1);        int ans = -INF;        for(int i = 0; i < n; i++)            for(int j = 0; j < i; j++)            {                Insert(a[i], -1);                Insert(a[j], -1);                int tmp = a[i] + a[j];                tmp = tmp ^ solve(tmp);                ans = max(ans, tmp);                Insert(a[i], 1);                Insert(a[j], 1);            }        printf("%d\n", ans);    }    return 0;}


1 0
原创粉丝点击