首页 > 其他分享 >Codeforces Round #613 (Div. 2) D

Codeforces Round #613 (Div. 2) D

时间:2022-11-24 20:58:28浏览次数:42  
标签:idx int 613 Codeforces son Div dp 分支

D. Dr. Evil Underscores

看完题发现是异或 不难按位考虑
观察样例发现好像要是只要是一个分支的时候就可以为消除这一位的影响
我们直接建出字典树
发现要是该位只有一个分支我们显然可以选择与此分支相同的消除这一位的影响
要是不同 我们就相当于 选择进一个分支 这就是我们的dp了
dp[u]表示该子树的min 这里我们直接递归的时候维护dp[u]即可

const int MAXN = 5e5 + 5;
int son[MAXN*30][2], idx;
int MAXBIT = 30,st[31];
void init(){
    son[0][0] = son[0][1] = 0;
    idx = 1;
}
void add(int n){
    int p = 0;
    for (int i = MAXBIT; i >= 0; --i){
        int u = (n >> i) & 1;
        if (!son[p][u]) {
            son[idx][0] = son[idx][1] = 0;
            son[p][u] = idx++;
        }
        p = son[p][u];
    }
}
int dp(int p,int w){
    if(w<0)return 0;
    if(son[p][0]&&son[p][1]){
        return (1<<w)+min(dp(son[p][0],w-1),dp(son[p][1],w-1));
    }else if(son[p][0]){
        return dp(son[p][0],w-1);
    }else{
        return dp(son[p][1],w-1);
    }
}
void solve(){
    int n;cin>>n;
    init();
    vector<int>a(n+1);
    for(int i=1;i<=n;i++)cin>>a[i],add(a[i]);
    cout<<dp(0,30)<<endl;
}

标签:idx,int,613,Codeforces,son,Div,dp,分支
From: https://www.cnblogs.com/ycllz/p/16923270.html

相关文章

  • Codeforces Round #829 (Div. 2)
    A.TechnicalSupport#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;typedefpair<ll,ll>pll;constllN=2e5+10;constllinf=1e18;constl......
  • Codeforces Round #418 (Div. 2) D. An overnight dance in discotheque 题解
    圆由于没有相交,之间的关系要么毫无关系,要么就是包含,所以能形成树。直接包含的就是父节点。如果只有一组,不分前半夜后半夜的话,那么舒适度就是每棵树的根节点(深度为0)面积......
  • CodeForces - 311B Cats Transport
    题意:洛谷翻译超可爱的放一下qwq解:先设dp[i][j]为安排前i个人接前j只猫的最小等待时间。显然要给猫排个序。猫可以等人,但人不会等猫。于是算一下每只猫需要人在什么时......
  • Codeforces Round #621 (Div. 1 + Div. 2) D
    D.CowandFields对于每个点我们可以通过两次bfs求出他离1最近的距离和离n最近的距离对于连边就是让d1[i]+d2[j]+1去更新最短路我们要让d1[i]+d2[j]+1最大我们先直......
  • Codeforces Round #771 (Div. 2) E Colorful Operations
    ColorfulOperations珂朵莉树+树状数组||线段树单独维护点当前的值\(val\)和当前颜色的值\(tag\)这样就可以分开维护颜色和点的值,把复杂的操作\(2\)变成\(O(......
  • Codeforces Round #804 (Div. 2) C D
    C1700D2300所以我并没有做水题。考虑0的位置一定不动再考虑1的位置也不动考虑2的位置不妨设0的位置为L1的位置为R那么若2的位置在L~R之间那么2就可以随便放......
  • Public NOIP Round #3(Div. 1) 题解
    T2:先判\(1,n\)有连边的情况,也就是说明最短路一定是\(1\)直接走到\(n\)。特判掉\(k=1,n=2\)的情况,这是无解的。那么如果\(k\ge2\)就令\(1,n\)都为\(U\),其余随......
  • Codeforces Round #835 (Div. 4) A-G完全题解
    比赛链接A、点击查看代码#include<bits/stdc++.h>usingnamespacestd;intmain(){intT;cin>>T;while(T--){vector<int>G;for(inti=1;......
  • Codeforces Round #831 (Div. 1 + Div. 2)
    C核心思路:这个题目其实是一个规律题,它有一个很重要的前提,那就是在分配方案最优的情况下,要不然我们直接选几个差值最大的就ok,那他这句话,其实我们结合几个样例就知道,有一个......
  • Codeforces Round #790 (Div.4) A-H2题解
    原题链接:https://codeforces.com/contest/1676A.Lucky?题意:给定长度为6由数字组成的字符串问前三个数字的和是否等后三个数字的和。题解:直接相加比较即可。#include<......