搜索

Codeforces Round #613 (Div. 2) D


发布时间: 2022-11-24 20:57:01    浏览次数:74 次

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;
}
免责声明 Codeforces Round #613 (Div. 2) D,资源类别:文本, 浏览次数:74 次, 文件大小:-- , 由本站蜘蛛搜索收录2022-11-24 08:57:01。此页面由程序自动采集,只作交流和学习使用,本站不储存任何资源文件,如有侵权内容请联系我们举报删除, 感谢您对本站的支持。 原文链接:https://www.cnblogs.com/ycllz/p/16923270.html