AOJ 1188 - Hierarchical Democracy

iteratorはミスるなあ.

解法

簡単な構文解析(というほど大げさじゃない?)

コード

#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>

typedef std::string::const_iterator State;

std::string S;

int solve(State& s){
    s++;
    if(std::isdigit(*s)){
        int n = 0;
        for(;std::isdigit(*s);s++){
            n = 10 * n + (*s - '0');
        }
        s++;
        return (n+1) / 2;
    }

    std::vector<int> v;
    for(;;){
        if(*s == '['){
            v.push_back(solve(s));
        }else{
            break;
        }
    }
    s++;

    std::sort(v.begin(), v.end());
    int res = 0;
    for(int i=0;i<(v.size()+1)/2;i++){
        res += v[i];
    }

    return res;
}

int main(){
    int N;
    std::cin >> N;

    while(N--){
        std::cin >> S;

        State s = S.begin();
        std::cout << solve(s) << std::endl;
    }
}