Problem p02603 (C++) — buggy submission, verdict: Runtime Error

/**
 * Я слил Atcoder Beginner Contest 172, решив всего две задачи!
 * Я не могу апнуть синего!
 * Я постоянно сливаю раунды, либо не решив тупую задачу, либо набрав штрафа!
 * Я постоянно уступаю всем своим друзьям и знакомым в контестах и нахожу этому
 *оправдания! Я постоянно придумываю сложные неверные решения к простым задачам!
 * -------------------------------------------------------------
 * -Решать сложные задачи
 * -Участвовать в контестах
 * -Делать виртуальные соревнования
 * -------------------------------------------------------------
 * Не уберу это, пока не начну нормально решать задачи, а не заниматься
 *ерундой!!!
 **/

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")

typedef long long ll;

#define press_F_to_pay_respect                                                 \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
#define forn for (int i = 0; i < n; i++)
#define fore(i, a, b) for (int i = a; i < (b); i++)
#define pb push_back
#define pob pop_back()
#define mp make_pair
#define sc second
#define f first
#define ld long double
#define kek cout << endl;
#define rep(i, a, b) for (int i = a; i < b; i++)
#define all(v) ((v).begin()), ((v).end())
#define halt                                                                   \\
  {                                                                            \\
    cout << "NO";                                                              \\
    return 0;                                                                  \\
  }

const ll MOD = 1e9 + 7;
const ll MOD1 = 998244353;
const int N = 200010;
const int INF = 1e8;
const ll LL_INF = 1e10;
const long double pi = 3.1415926535;
using namespace std;
using namespace __gnu_pbds;
typedef tree<ld, null_type, less<ld>, rb_tree_tag,
             tree_order_statistics_node_update>
    indexed_set;

int main() {
#if defined(_DEBUG)
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif
  press_F_to_pay_respect;
  // cout << fixed << setprecision(12) << ans;
  // string al = "abcdefghijklmnopqrstuvwxyz";
  int questions = 1;
  // cin>>questions;

  while (questions--) {

    int n;
    cin >> n;
    vector<ll> v(n);
    forn cin >> v[i];
    ll ans = 1000;
    ll cnt = 0;
    vector<pair<bool, pair<int, int>>> p;
    for (int i = 0; i < n - 1; i++) {
      if (v[i] < v[i + 1]) {
        p.pb({1, {v[i], v[i + 1]}});
      }
      if (v[i] > v[i + 1]) {
        p.pb({0, {v[i], v[i + 1]}});
      }
    }
    while (p.size()) {
      bool last = p.back().f;
      if (!last)
        p.pop_back();
      else
        break;
    }

    bool good = 0;
    for (auto x : p)
      good |= x.f;
    if (!good)
      goto lambda;

    for (auto x : p) {
      bool ok = x.f;
      if (ok) {
        int sell = x.sc.f;
        int buy = x.sc.sc;
        cnt += ans / sell;
        ans %= sell;
        ans += cnt * buy;
        cnt = 0;
      } else {
        int sell = x.sc.sc;
        int buy = x.sc.f;
        ans += cnt * buy;
        cnt = 0;
        cnt += ans / sell;
        ans %= sell;
      }
      // cout<<ans<<" "<<cnt<<endl;
    }
    // cout<<cnt<<" ";
  lambda:
    cout << ans;
  }

  // cout <<"Runtime is:"<<clock() * 1.0 / CLOCKS_PER_SEC <<endl;
  return 0;
}

Error: WA

Fixed submission:

/**
 * Я слил Atcoder Beginner Contest 172, решив всего две задачи!
 * Я не могу апнуть синего!
 * Я постоянно сливаю раунды, либо не решив тупую задачу, либо набрав штрафа!
 * Я постоянно уступаю всем своим друзьям и знакомым в контестах и нахожу этому
 *оправдания! Я постоянно придумываю сложные неверные решения к простым задачам!
 * -------------------------------------------------------------
 * -Решать сложные задачи
 * -Участвовать в контестах
 * -Делать виртуальные соревнования
 * -------------------------------------------------------------
 * Не уберу это, пока не начну нормально решать задачи, а не заниматься
 *ерундой!!!
 **/

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")

typedef long long ll;

#define press_F_to_pay_respect                                                 \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
#define forn for (int i = 0; i < n; i++)
#define fore(i, a, b) for (int i = a; i < (b); i++)
#define pb push_back
#define pob pop_back()
#define mp make_pair
#define sc second
#define f first
#define ld long double
#define kek cout << endl;
#define rep(i, a, b) for (int i = a; i < b; i++)
#define all(v) ((v).begin()), ((v).end())
#define halt                                                                   \\
  {                                                                            \\
    cout << "NO";                                                              \\
    return 0;                                                                  \\
  }

const ll MOD = 1e9 + 7;
const ll MOD1 = 998244353;
const int N = 200010;
const int INF = 1e8;
const ll LL_INF = 1e10;
const long double pi = 3.1415926535;
using namespace std;
using namespace __gnu_pbds;
typedef tree<ld, null_type, less<ld>, rb_tree_tag,
             tree_order_statistics_node_update>
    indexed_set;

int main() {
#if defined(_DEBUG)
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif
  press_F_to_pay_respect;
  // cout << fixed << setprecision(12) << ans;
  // string al = "abcdefghijklmnopqrstuvwxyz";
  int questions = 1;
  // cin>>questions;

  while (questions--) {

    int n;
    cin >> n;
    vector<ll> v(n);
    forn cin >> v[i];
    ll ans = 1000;
    ll cnt = 0;
    vector<pair<bool, pair<int, int>>> p;
    for (int i = 0; i < n - 1; i++) {
      if (v[i] < v[i + 1]) {
        p.pb({1, {v[i], v[i + 1]}});
      }
      if (v[i] > v[i + 1]) {
        p.pb({0, {v[i], v[i + 1]}});
      }
    }
    bool last = p.back().f;
    if (!last)
      p.pop_back();

    bool good = 0;
    for (auto x : p)
      good |= x.f;
    if (!good)
      goto lambda;

    for (auto x : p) {
      bool ok = x.f;
      if (ok) {
        int sell = x.sc.f;
        int buy = x.sc.sc;
        cnt += ans / sell;
        ans %= sell;
        ans += cnt * buy;
        cnt = 0;
      } else {
        int sell = x.sc.sc;
        int buy = x.sc.f;
        ans += cnt * buy;
        cnt = 0;
        cnt += ans / sell;
        ans %= sell;
      }
    }
  // cout<<cnt<<" ";
  lambda:
    cout << ans;
  }

  // cout <<"Runtime is:"<<clock() * 1.0 / CLOCKS_PER_SEC <<endl;
  return 0;
}