fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. typedef long long ll;
  6. typedef unsigned long long ull;
  7. typedef pair<int, int> pii;
  8. typedef pair<ll, ll> pll;
  9. typedef vector<int> vi;
  10. typedef vector<ll> vll;
  11. typedef string str;
  12.  
  13. #define pb push_back
  14. #define mp make_pair
  15. #define fi first
  16. #define se second
  17. #define all(x) (x).begin(), (x).end()
  18. #define len(x) ((int)(x).size())
  19.  
  20. #define forn(i, n) for (int i = 0; i < (int)(n); ++i)
  21. #define forr(i, l, r) for (int i = (int)(l); i <= (int)(r); ++i)
  22. #define ford(i, r, l) for (int i = (int)(r); i >= (int)(l); --i)
  23.  
  24. #define cmin(a, b) a = min(a, b)
  25. #define cmax(a, b) a = max(a, b)
  26.  
  27. str decode(str s) {
  28. stack<int> num_stack;
  29. stack<str> str_stack;
  30. str cur_str = "";
  31. int cur_num = 0;
  32.  
  33. forn(i, len(s)) {
  34. if (isdigit(s[i])) {
  35. cur_num = cur_num * 10 + (s[i] - '0');
  36. } else if (s[i] == '[') {
  37. num_stack.push(cur_num);
  38. str_stack.push(cur_str);
  39. cur_num = 0;
  40. cur_str = "";
  41. } else if (s[i] == ']') {
  42. int k = num_stack.top();
  43. num_stack.pop();
  44.  
  45. str prev_str = str_stack.top();
  46. str_stack.pop();
  47.  
  48. str repeated = "";
  49. forn(j, k) {
  50. repeated += cur_str;
  51. }
  52.  
  53. cur_str = prev_str + repeated;
  54. } else {
  55. cur_str += s[i];
  56. }
  57. }
  58. return cur_str;
  59. }
  60.  
  61. int main() {
  62. ios_base::sync_with_stdio(false);
  63. cin.tie(NULL);
  64.  
  65. str s;
  66. if (cin >> s) {
  67. cout << decode(s) << "\n";
  68. }
  69. return 0;
  70. }
  71.  
Success #stdin #stdout 0.01s 5320KB
stdin
3[a2[c]]
stdout
accaccacc