fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <string>
  4. #include <vector>
  5. #include <cctype>
  6. using namespace std;
  7.  
  8. typedef string::const_iterator iter;
  9.  
  10. int number(iter& p);
  11.  
  12. int expr(iter& p) {
  13. p++; // skip [
  14. int ans;
  15. if(isdigit(*p)) {
  16. int res = number(p);
  17. ans = res / 2 + 1;
  18. }
  19. else {
  20. vector<int> vec;
  21. while(*p == '[') {
  22. vec.push_back(expr(p));
  23. }
  24. sort(vec.begin(), vec.end());
  25. int res = 0;
  26. for(int i = 0; i < (int)vec.size() / 2 + 1; i++) {
  27. res += vec[i];
  28. }
  29. ans = res;
  30. }
  31. p++; // skip ]
  32. return ans;
  33. }
  34.  
  35. int number(iter& p) {
  36. int res = 0;
  37. while(isdigit(*p)) {
  38. res *= 10;
  39. res += *p - '0';
  40. p++;
  41. }
  42. return res;
  43. }
  44.  
  45. int main() {
  46. int n; cin >> n;
  47. while(n-- ){
  48. string s; cin >> s;
  49. iter it = s.begin();
  50. int res = expr(it);
  51. cout << res << endl;
  52. }
  53. }
  54.  
Success #stdin #stdout 0s 2992KB
stdin
6
[[123][4567][89]]
[[5][3][7][3][9]]
[[[99][59][63][85][51]][[1539][7995][467]][[51][57][79][99][3][91][59]]]
[[[37][95][31][77][15]][[43][5][5][5][85]][[71][3][51][89][29]][[57][95][5][69][31]][[99][59][65][73][31]]]
[[[[9][7][3]][[3][5][7]][[7][9][5]]][[[9][9][3]][[5][9][9]][[7][7][3]]][[[5][9][7]][[3][9][3]][[9][5][5]]]]
[[8231][3721][203][3271][8843]]
stdout
107
7
175
95
21
3599