zoukankan      html  css  js  c++  java
  • UVA-12166 Equilibrium Mobile(二叉树)

    题目大意:改变二叉树上的权值,使树平衡,问最少该几个值。

    题目分析:不会做,查的题解。有条奇妙的性质:如果将第d层权值为w的节点为基准做改动,则整棵树的总重量为w<<d,即w*2^d。仔细一想,确实是这样的。

    代码如下:

    # include<iostream>
    # include<cstdio>
    # include<map>
    # include<cstring>
    # include<algorithm>
    using namespace std;
    
    int cnt;
    string str;
    map<long long,int>mp;
    
    void solve(int l,int r,int d)
    {
        if(str[l]=='['){
            int flag=0;
            for(int i=l+1;i<r;++i){
                if(str[i]=='[') ++flag;
                if(str[i]==']') --flag;
                if(!flag&&str[i]==','){
                    solve(l+1,i-1,d+1);
                    solve(i+1,r-1,d+1);
                }
            }
        }else{
            long long w=0;
            for(int i=l;i<=r;++i)
                w=w*10+str[i]-'0';
            ++cnt;
            ++mp[w<<d];
        }
    }
    
    int main()
    {
        int T;
        scanf("%d",&T);
        while(T--)
        {
            mp.clear();
            cnt=0;
            cin>>str;
            solve(0,str.size()-1,0);
            int maxn=0;
            for(map<long long,int>::iterator it=mp.begin();it!=mp.end();++it)
                maxn=max(maxn,it->second);
            printf("%d
    ",cnt-maxn);
        }
        return 0;
    }
    

      

  • 相关阅读:
    Hibernate 查询语句
    application 网站计数器
    Hibernate 配置
    常用正则表达式
    字符串的系列操作
    输入内容验证
    大小写字母验证
    验证非零的正整数
    验证数字输入
    Java面向对象之多态
  • 原文地址:https://www.cnblogs.com/20143605--pcx/p/4864815.html
Copyright © 2011-2022 走看看