1188:Hierarchical Democracy

問題文
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1188&lang=jp





























構文解析した。
数字は全部n/2+1して、括弧ではソートして小さい方から過半数とる。

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

int now;
string s;

int number(){
  int res=0;
  while('0'<=s[now] && s[now]<='9')
    res*=10,res+=s[now++]-'0';
  return res/2+1;
}

int factor(){
  
  if(s[now]=='['){
    vector<int>v;
    while(s[now]=='['){
      now++;
      v.push_back(factor());
      now++;
    }
    sort(v.begin(),v.end());
    int res=0;
    for(int i=0;i<v.size()/2+1;i++)res+=v[i];
    return res;
  }
  return number();
}

int main(void){
  
  int n;
  cin >> n;

  while(n--){
    now=0;
    cin >> s;
    cout << factor() << endl;
  }

  return 0;
}