zoukankan      html  css  js  c++  java
  • UVa 12166 修改天平

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3318

    题意:给一个深度不超过16的二叉树,代表一个天平。每根杆悬挂在中间,每个秤砣的重量已知,至少修改多少个秤砣的重量才能让天平平衡?

    要让天平平衡,必须以其中一个秤砣作为标准,然后修改其余的秤砣。当以深度为d,值为x的叶子节点作为标准时,可以发现此时天平的总质量为x<<d。

    因此可以遍历二叉树的每个叶子节点,在这里可以使用map容器,计算出秤砣总质量m所出现的次数,并且记录叶子节点数量number。这样,最后(number-map容器中最大的数)即为修改的最少次数。

    一开始我不明白为什么要w*10,直接w<<depth不就行了,后来意识到如果是多位数就需要*10了...

     1 #include<iostream>
     2 #include<map>
     3 #include<cstring>
     4 #include<string>
     5 #include<algorithm>
     6 using namespace std;
     7 
     8 int number;
     9 string line;
    10 map<long long, int> ans;
    11 
    12 void dfs(int depth, int s, int length)
    13 {
    14     if (line[s] == '[')
    15     {
    16         int p = 0;
    17         for (int i = s + 1; i<length; i++)
    18         {
    19             if (line[i] == '[')  p++;
    20             if (line[i] == ']')  p--;
    21             if (p == 0 && line[i] == ',')
    22             {
    23                 dfs(depth + 1, s + 1, i-1);
    24                 dfs(depth + 1, i + 1, length - 1);
    25             }
    26         }
    27     }
    28     else {
    29         long long w = 0;
    30         for (int i = s; i <= length; i++)
    31             w = w * 10 + line[i] - '0';
    32         ++number;
    33         ++ans[w << depth];
    34     }
    35 }
    36 
    37 int main()
    38 {
    39     int t;
    40     int maxn;
    41     cin >> t;
    42     while (t--)
    43     {
    44         cin >> line;
    45         ans.clear();
    46         number = 0;
    47         dfs(0, 0, line.size()-1);
    48         maxn = 0;
    49         map<long long, int>::iterator it = ans.begin();
    50         for (; it != ans.end(); it++)
    51         {
    52             maxn = max(maxn, it->second);
    53         }
    54         cout << number - maxn << endl;
    55     }
    56     return 0;
    57 }
  • 相关阅读:
    好文推荐 | 走近NLP学术界
    好文推荐 | 自然语言处理简介
    白嫖SSL证书部署(结合宝塔)
    基于本体体系的知识图谱构建
    Apache Jena Fuseki使用
    Springboot2.x入门——helloWorld
    Markdown语法
    freeswitch:error C2220: 警告被视为错误
    yate: windows下源码下载,配置,编译
    Android开源框架:volley
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6227627.html
Copyright © 2011-2022 走看看