zoukankan      html  css  js  c++  java
  • UVa 12166

    A mobile is a type of kinetic sculpture constructed to take advantage of the principle of equilibrium. It consists of a number of rods, from which weighted objects or further rods hang. The objects hanging from the rods balance each other, so that the rods remain more or less horizontal. Each rod hangs from only one string, which gives it freedom to rotate about the string.

    We consider mobiles where each rod is attached to its string exactly in the middle, as in the figure underneath. You are given such a configuration, but the weights on the ends are chosen incorrectly, so that the mobile is not in equilibrium. Since that's not aesthetically pleasing, you decide to change some of the weights.

    What is the minimum number of weights that you must change in order to bring the mobile to equilibrium? You may substitute any weight by any (possibly non-integer) weight. For the mobile shown in the figure, equilibrium can be reached by changing the middle weight from 7 to 3, so only 1 weight needs to changed.

    Input

    On the first line one positive number: the number of testcases, at most 100. After that per testcase:
    • One line with the structure of the mobile, which is a recursively defined expression of the form:
        <expr> ::= <weight> | "[" <expr> "," <expr> "]"
      with <weight> a positive integer smaller than 109 indicating a weight and [<expr>,<expr>] indicating a rod with the two expressions at the ends of the rod. The total number of rods in the chain from a weight to the top of the mobile will be at most 16.

    Output

    Per testcase:
    • One line with the minimum number of weights that have to be changed.

    Sample Input

    3
    [[3,7],6]
    40
    [[2,3],[4,5]]
    

    Sample Output

    1
    0
    3
    
    
    
    
    #include <bits/stdc++.h>
    using namespace std;
    
    int cur = 0;
    char str[1024000];
    map<long long, int> cnt;
    
    void DFS(int dep)
    {
        if(isdigit(str[cur])){
            long long a = 0;
            while(isdigit(str[cur]))
                a = a * 10 + str[cur++] - '0';
            cnt[a<<dep]++;
        }
        else{
            cur++; DFS(dep + 1);
            cur++; DFS(dep + 1);
            cur++;
        }
    }
    
    int main()
    {
        ios::sync_with_stdio(false);
        int T; cin >> T; cin.get();
        while(cur = 0, cnt.clear(), T--) {
            cin >> str; DFS(0);
            int mx = INT_MIN, sum = 0;
            for(map<long long, int>::iterator it = cnt.begin(); it != cnt.end(); it++)
                sum += it->second, mx = max(mx, it->second);
            cout << sum - mx << endl;
        }
        return 0;
    }


    
    
  • 相关阅读:
    Phalanx--hdu2859(dp 最大对称子图)
    Spring Cloud-hystrix Dashboard(八)
    Spring Cloud-hystrix使用例子(七)
    mysql deadlock、Lock wait timeout解决和分析
    Spring Cloud-hystrix(六)
    Spring Cloud-Ribbon负载均衡策略类IRule(五)
    Spring Cloud-Ribbon ILoadBalancer负载均衡器核心源码(四)
    Spring Cloud-Ribbon实现客户端的服务均衡(三)
    Spring Cloud-Eureka实现服务的注册与发现(二)
    Spring Cloud-个人理解的微服务演变过程(一)
  • 原文地址:https://www.cnblogs.com/kunsoft/p/5312737.html
Copyright © 2011-2022 走看看