Problem p03999 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define rep2(i, s, n) for (int i = s; i < (n); ++i)
#define ALL(v) (v).begin(), (v).end()

using namespace std;

typedef long long ll;

template <typename T>
using priority_queue_rev = priority_queue<T, vector<T>, greater<T>>;

static const int INTINF = (2147483647 >> 1); // 10^9 + 5000
static const ll LLINF = (9223372036854775807 >> 1);
static const int MAX = 1e5 + 1;
static const ll MOD = 1e9 + 7;

namespace Kunitaka {
template <typename TYPE, std::size_t SIZE>
std::size_t array_length(const TYPE (&array)[SIZE]) {
  return SIZE;
}

template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
} // namespace Kunitaka
using namespace Kunitaka;
namespace Printer {
void br() { cout << endl; }

void loop_cnt(int i) { cout << "i = " << i << endl; }

void loop_cnt(int i, int j) {
  cout << "i = " << i << ", "
       << "j = " << j << endl;
}

template <class T> void print(T x) { cout << x << endl; }

template <class T, class S> void print(T x, S y) {
  cout << x << "," << y << endl;
}

template <class T, class S, class U> void print(T x, S y, U z) {
  cout << x << "," << y << "," << z << endl;
}

template <class T, class S> void print(pair<T, S> p) {
  cout << p.first << ", " << p.second << endl;
}

template <typename TYPE, std::size_t SIZE>
void print(const TYPE (&array)[SIZE]) {
  int lim = array_length(array);
  for (int i = 0; i < lim; i++) {
    if (i)
      cout << " ";
    cout << array[i];
  }
  cout << endl;
}

template <class S> void print(vector<S> v) {
  for (int i = 0; i < v.size(); i++) {
    if (i)
      cout << " ";
    cout << v[i];
  }
  cout << endl;
}

template <class S> void print(vector<vector<S>> vv) {
  for (int i = 0; i < vv.size(); i++) {
    for (int j = 0; j < vv[i].size(); j++) {
      if (j)
        cout << " ";
      cout << vv[i][j];
    }
    cout << endl;
  }
}

void yesno(bool x) {
  if (x)
    cout << "Yes" << endl;
  else
    cout << "No" << endl;
}
}; // namespace Printer
using namespace Printer;

int main(int argc, const char *argv[]) {
  // 提出時、消す----//
  //--------------//

  // input
  cout << fixed << setprecision(10);
  string S;
  cin >> S;

  vector<string> strs;
  strs.push_back("0");
  strs.push_back("1");
  while (1) {
    vector<string> strs2;
    if (strs.size() > 0) {
      if (strs[0].size() == S.size() - 1)
        break;
    }
    rep(i, strs.size()) {
      strs2.push_back(strs[i] + '0');
      strs2.push_back(strs[i] + '1');
    }
    strs = strs2;
  }
  // print(strs);

  ll res = 0;
  rep(i, strs.size()) {
    vector<ll> v;
    string a;
    a.push_back(S[0]);
    rep(j, strs[i].size()) {
      if (strs[i][j] == '1') {
        v.push_back(stoll(a));
        a.clear();
        a.push_back(S[j + 1]);
      } else {
        a.push_back(S[j + 1]);
      }
    }
    v.push_back(stoll(a));
    res += accumulate(ALL(v), 0LL);
    // print(res);
  }

  cout << res << endl;

  return 0;
}


Fixed submission:
#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define rep2(i, s, n) for (int i = s; i < (n); ++i)
#define ALL(v) (v).begin(), (v).end()

using namespace std;

typedef long long ll;

template <typename T>
using priority_queue_rev = priority_queue<T, vector<T>, greater<T>>;

static const int INTINF = (2147483647 >> 1); // 10^9 + 5000
static const ll LLINF = (9223372036854775807 >> 1);
static const int MAX = 1e5 + 1;
static const ll MOD = 1e9 + 7;

namespace Kunitaka {
template <typename TYPE, std::size_t SIZE>
std::size_t array_length(const TYPE (&array)[SIZE]) {
  return SIZE;
}

template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
} // namespace Kunitaka
using namespace Kunitaka;
namespace Printer {
void br() { cout << endl; }

void loop_cnt(int i) { cout << "i = " << i << endl; }

void loop_cnt(int i, int j) {
  cout << "i = " << i << ", "
       << "j = " << j << endl;
}

template <class T> void print(T x) { cout << x << endl; }

template <class T, class S> void print(T x, S y) {
  cout << x << "," << y << endl;
}

template <class T, class S, class U> void print(T x, S y, U z) {
  cout << x << "," << y << "," << z << endl;
}

template <class T, class S> void print(pair<T, S> p) {
  cout << p.first << ", " << p.second << endl;
}

template <typename TYPE, std::size_t SIZE>
void print(const TYPE (&array)[SIZE]) {
  int lim = array_length(array);
  for (int i = 0; i < lim; i++) {
    if (i)
      cout << " ";
    cout << array[i];
  }
  cout << endl;
}

template <class S> void print(vector<S> v) {
  for (int i = 0; i < v.size(); i++) {
    if (i)
      cout << " ";
    cout << v[i];
  }
  cout << endl;
}

template <class S> void print(vector<vector<S>> vv) {
  for (int i = 0; i < vv.size(); i++) {
    for (int j = 0; j < vv[i].size(); j++) {
      if (j)
        cout << " ";
      cout << vv[i][j];
    }
    cout << endl;
  }
}

void yesno(bool x) {
  if (x)
    cout << "Yes" << endl;
  else
    cout << "No" << endl;
}
}; // namespace Printer
using namespace Printer;

int main(int argc, const char *argv[]) {
  // 提出時、消す----//
  //--------------//

  // input
  cout << fixed << setprecision(10);
  string S;
  cin >> S;
  if (S.size() == 1) {
    cout << S << endl;
    return 0;
  }

  vector<string> strs;
  strs.push_back("0");
  strs.push_back("1");
  while (1) {
    vector<string> strs2;
    if (strs.size() > 0) {
      if (strs[0].size() == S.size() - 1)
        break;
    }
    rep(i, strs.size()) {
      strs2.push_back(strs[i] + '0');
      strs2.push_back(strs[i] + '1');
    }
    strs = strs2;
  }
  // print(strs);

  ll res = 0;
  rep(i, strs.size()) {
    vector<ll> v;
    string a;
    a.push_back(S[0]);
    rep(j, strs[i].size()) {
      if (strs[i][j] == '1') {
        v.push_back(stoll(a));
        a.clear();
        a.push_back(S[j + 1]);
      } else {
        a.push_back(S[j + 1]);
      }
    }
    v.push_back(stoll(a));
    res += accumulate(ALL(v), 0LL);
    // print(res);
  }

  cout << res << endl;

  return 0;
}