Problem p02814 (C++)

Buggy submission (status: Time Limit Exceeded):
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
// #include <boost/multiprecision/cpp_int.hpp>
// typedef boost::multiprecision::cpp_int ll;
typedef long double dd;
#define i_7 (ll)(1E9 + 7)
// #define i_7 998244353
#define i_5 i_7 - 2
ll mod(ll a) {
  ll c = a % i_7;
  if (c >= 0)
    return c;
  return c + i_7;
}
typedef pair<ll, ll> l_l;
ll inf = (ll)1E16;
#define rep(i, l, r) for (ll i = l; i <= r; i++)
#define pb push_back
ll max(ll a, ll b) {
  if (a < b)
    return b;
  else
    return a;
}
ll min(ll a, ll b) {
  if (a > b)
    return b;
  else
    return a;
}
void Max(ll &pos, ll val) { pos = max(pos, val); } // Max(dp[n],dp[n-1]);
void Min(ll &pos, ll val) { pos = min(pos, val); }
void Add(ll &pos, ll val) { pos = mod(pos + val); }
dd EPS = 1E-9;
#define fastio                                                                 \
  ios::sync_with_stdio(false);                                                 \
  cin.tie(0);                                                                  \
  cout.tie(0);
////////////////////////////

ll gcd(ll x, ll y) {
  if (x < y)
    return gcd(y, x);
  if (y == 0)
    return x;
  return gcd(y, x % y);
}

int main() {
  ll n, m;
  cin >> n >> m;
  ll a[n];
  ll b[n];
  ll g = 1;
  int bol = 0;
  rep(i, 0, n - 1) {
    cin >> a[i];
    b[i] = a[i] / 2;
    if (i == 0) {
      bol = b[i] % 2;
    } else {
      if (bol != b[i] % 2) {
        cout << 0 << endl;
        return 0;
      }
    }
    g = (g * b[i]) / gcd(g, b[i]);
  }
  if (bol == 1) {
    ll ans = (m + g) / (2 * g);
    cout << ans << endl;
  } else {
    rep(i, 0, n - 1) {
      if ((g / b[i]) % 2 == 0) {
        cout << 0 << endl;
        return 0;
      }
    }
    ll ans = (m + g) / (2 * g);
    cout << ans << endl;
  }

  return 0;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
// #include <boost/multiprecision/cpp_int.hpp>
// typedef boost::multiprecision::cpp_int ll;
typedef long double dd;
#define i_7 (ll)(1E9 + 7)
// #define i_7 998244353
#define i_5 i_7 - 2
ll mod(ll a) {
  ll c = a % i_7;
  if (c >= 0)
    return c;
  return c + i_7;
}
typedef pair<ll, ll> l_l;
ll inf = (ll)1E16;
#define rep(i, l, r) for (ll i = l; i <= r; i++)
#define pb push_back
ll max(ll a, ll b) {
  if (a < b)
    return b;
  else
    return a;
}
ll min(ll a, ll b) {
  if (a > b)
    return b;
  else
    return a;
}
void Max(ll &pos, ll val) { pos = max(pos, val); } // Max(dp[n],dp[n-1]);
void Min(ll &pos, ll val) { pos = min(pos, val); }
void Add(ll &pos, ll val) { pos = mod(pos + val); }
dd EPS = 1E-9;
#define fastio                                                                 \
  ios::sync_with_stdio(false);                                                 \
  cin.tie(0);                                                                  \
  cout.tie(0);
////////////////////////////

ll gcd(ll x, ll y) {
  if (x < y)
    return gcd(y, x);
  if (y == 0)
    return x;
  return gcd(y, x % y);
}

int main() {
  ll n, m;
  cin >> n >> m;
  ll a[n];
  ll b[n];
  ll g = 1;
  int bol = 0;
  rep(i, 0, n - 1) {
    cin >> a[i];
    b[i] = a[i] / 2;
    if (i == 0) {
      bol = b[i] % 2;
    } else {
      if (bol != b[i] % 2) {
        cout << 0 << endl;
        return 0;
      }
    }
    if (g <= 10 * m) {
      g = (g * b[i]) / gcd(g, b[i]);
    } else {
      cout << 0 << endl;
      return 0;
    }
  }
  if (bol == 1) {
    ll ans = (m + g) / (2 * g);
    cout << ans << endl;
  } else {
    rep(i, 0, n - 1) {
      if ((g / b[i]) % 2 == 0) {
        cout << 0 << endl;
        return 0;
      }
    }
    ll ans = (m + g) / (2 * g);
    cout << ans << endl;
  }

  return 0;
}