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; } }