挂个链接

Description:

给你 \(n\) 个数 \(a_1,a_2,……,a_n\) ,让你找出一个 \(x\) ,使 \(x\) 分别异或每一个数后得到的 \(n\) 个结果的最大值最小。

Solution:

设 \(x\) 为题中所说, \(m\) 为 \(max{x^a_i}\) :

构建 \(01Trie\) ,将所有数的二进制形式存到 \(01Trie\) 上,对于第 \(k\) 位,存在两种情况:

  • 一是都是0或都是1,这样只要使 \(x\) 的第 \(k\) 位为1或0,就可以使 \(m\) 的第k位为0.根据贪心的策略,高位为0的数一定比高位为1的数小,不管低位怎样。

  • 二是这一位0和1都有,那么分开dfs,取最大值。这种情况不太好理解,具体可以见代码。

Code:

我没有建 \(Trie\) ,而是直接dfs。

\(dfs(v[],k)\) 表示 \(v\) 中的数的最小的 \(m\) ,并且已经搜到第 \(k\) 位了。(锹黑板,划重点!!!


#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const ll N = 1e5+1;
ll n,ans; ll dfs(vector<ll> v,ll k)
{
vector<ll> v1,v2;
if(k<0) return 0;
for(int i=0;i<v.size();++i)
{
if((v[i]>>k)&1) v1.push_back(v[i]);
else v2.push_back(v[i]);
}
if(v1.empty()||v2.empty()) return dfs(v,k-1);//01Trie 只有一个分支
ll d1=dfs(v1,k-1),d2=dfs(v2,k-1);
return min(max(d1,d2+(1<<k)),max(d1+(1<<k),d2));//有两个分支
} int main()
{
vector<ll> v;
scanf("%lld",&n);
while(n--)
{
ll tmp;scanf("%lld",&tmp);
v.push_back(tmp);
}
printf("%lld\n",dfs(v,30));
return 0;
}

CF1285D Dr. Evil Underscores的更多相关文章

  1. DFS-B - Dr. Evil Underscores

    B - Dr. Evil Underscores Today, as a friendship gift, Bakry gave Badawy nn integers a1,a2,…,ana1,a2, ...

  2. CF1285 --- Dr. Evil Underscores

    CF1285 --- Dr. Evil Underscores 题干 Today as a friendship gift, Bakry gave Badawy \(n\) integers \(a_ ...

  3. codeforces 1285D. Dr. Evil Underscores(字典树)

    链接:https://codeforces.com/problemset/problem/1285/D 题意:给n个数a1,a2,a3.....an,找到一个数X,使得X 异或所有的ai ,得到的ma ...

  4. C - Dr. Evil Underscores CodeForces - 1285D 二进制

    题目大意:n个数,任意整数x对这n个数取异或值,然后使最大值最小. 思路:数据范围最大为pow(2,30);所以考虑二进制的话,最多有30位.对于某一位d,然后考虑数组v中每一个元素的d为是0还是1, ...

  5. codeforces每日一题1-10

    目录: 1.1093D. Beautiful Graph(DFS染色) 2.514C - Watto and Mechanism(Tire) 3.69E.Subsegments(STL) 4.25C. ...

  6. Codeforces Round #613 (Div. 2) A-E简要题解

    contest链接:https://codeforces.com/contest/1285 A. Mezo Playing Zoma 签到 #include<iostream> #incl ...

  7. Codeforces 862A Mahmoud and Ehab and the MEX

    传送门:CF-862A A. Mahmoud and Ehab and the MEX time limit per test 2 seconds memory limit per test 256 ...

  8. CS:APP3e 深入理解计算机系统_3e bomblab实验

    bomb.c /*************************************************************************** * Dr. Evil's Ins ...

  9. Benchmarking Apache Kafka: 2 Million Writes Per Second (On Three Cheap Machines)

    I wrote a blog post about how LinkedIn uses Apache Kafka as a central publish-subscribe log for inte ...

随机推荐

  1. linux中的diff命令

    今天在公司的代码中看到了一个用的不是很多的命令diff,一开始以为不是,后来一查发现还真有这个命令,有关它的详细资料在这个网址中查看[http://blog.chinaunix.net/uid-253 ...

  2. Presto入门介绍

    (一)背景 MapReduce不能满足大数据快速实时adhoc查询计算的性能要求,Facebook2012年开发,2013年开源 (二)是什么 基于内存的并行计算,Facebook推出的分布式SQL交 ...

  3. The Preliminary Contest for ICPC Asia Xuzhou 2019 J Random Access Iterator (树形DP)

    每次循环向下寻找孩子时,随机选取一个孩子,设dp[u]为从u出发,不能得出正确答案的概率,则从u出发,走一次的情况下不能得出正确答案的概率是 P = (dp[v1]+dp[v2]+dp[v3]+--d ...

  4. 吴裕雄 PYTHON 人工智能——基于MASK_RCNN目标检测(4)

    import os import sys import random import math import re import time import numpy as np import tenso ...

  5. 【原】python-jenkins信息

    1.官方文档: https://python-jenkins.readthedocs.io/en/latest/examples.html#example-1-get-version-of-jenki ...

  6. 【C语言】创建一个函数,将输入的2个数排序

    #include <stdio.h> void fun(int *x,int*y) { int t; if(*x>=*y) { t=*x;*x=*y;*y=t; } } main() ...

  7. ASCII码排序 题解

    1. while(scanf("%c%c%c%*c",&a,&b,&c)!=EOF) 这里需要注意  输入多组语句 while后面不能加分号: 2.%*c& ...

  8. VScode Vim插件快速上手与配置

    快速安装: 打开market place,搜索vim即可安装. 基本改建与配置说明: 方向键: 用I k j l表示光标上下左右,需要编辑visual mode和normal mode { " ...

  9. 根据权限显示accordion

    前端界面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Home.asp ...

  10. windows 删除进程

    win+R打开doc窗口 netstat -ano |findstr "8888" tskill 10120   结束进程