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

#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define X first
#define Y second
#define y0 y12
#define y1 y22
#define INF 987654321
#define PI 3.141592653589793238462643383279502884
#define fup(i, a, b, c) for (int(i) = (a); (i) <= (b); (i) += (c))
#define fdn(i, a, b, c) for (int(i) = (a); (i) >= (b); (i) -= (c))
#define MEM0(a) memset((a), 0, sizeof(a));
#define MEM_1(a) memset((a), -1, sizeof(a));
#define ALL(a) a.begin(), a.end()
#define SYNC                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef double db;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int, int> Pi;
typedef pair<ll, ll> Pll;
typedef pair<ld, ld> Pd;
typedef vector<int> Vi;
typedef vector<ll> Vll;
typedef vector<double> Vd;
typedef vector<Pi> VPi;
typedef vector<Pll> VPll;
typedef vector<Pd> VPd;
typedef tuple<int, int, int> iii;
typedef tuple<int, int, int, int> iiii;
typedef tuple<ll, ll, ll> LLL;
typedef vector<iii> Viii;
typedef vector<LLL> VLLL;
typedef complex<double> base;
const int MOD = 1000000007;
ll POW(ll a, ll b, ll MMM = MOD) {
  ll ret = 1;
  for (; b; b >>= 1, a = (a * a) % MMM)
    if (b & 1)
      ret = (ret * a) % MMM;
  return ret;
}
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll lcm(ll a, ll b) {
  if (a == 0 || b == 0)
    return a + b;
  return a * (b / gcd(a, b));
}
int dx[] = {0, 1, 0, -1, 1, 1, -1, -1}, dy[] = {1, 0, -1, 0, 1, -1, 1, -1};
int ddx[] = {2, 2, -2, -2, 1, 1, -1, -1}, ddy[] = {1, -1, 1, -1, 2, -2, 2, -2};

ll cnt[65][65];
int main() {
  int n;
  scanf("%d", &n);
  fup(i, 0, n - 1, 1) {
    db x;
    scanf("%lf", &x);
    ll a = (ll)round(x * 1e9);
    int t2 = 0, t5 = 0;
    while (a % 2 == 0) {
      t2++;
      a /= 2;
    }
    while (a % 5 == 0) {
      t5++;
      a /= 5;
    }
    cnt[t2][t5]++;
  }
  ll ans = 0;
  fup(i1, 0, 64, 1) fup(j1, 0, 64, 1) fup(i2, 0, 64, 1) fup(j2, 0, 64, 1) {
    if (mp(i1, j1) < mp(i2, j2) && i1 + i2 >= 18 && j1 + j2 >= 18)
      ans += cnt[i1][j1] * cnt[i2][j2];
  }
  fup(i, 9, 64, 1) fup(j, 9, 64, 1) {
    ll t = cnt[i][j];
    ans += t * (t - 1) / 2;
  }
  printf("%lld\\n", ans);
}

Error: 0

Fixed submission:

#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define X first
#define Y second
#define y0 y12
#define y1 y22
#define INF 987654321
#define PI 3.141592653589793238462643383279502884
#define fup(i, a, b, c) for (int(i) = (a); (i) <= (b); (i) += (c))
#define fdn(i, a, b, c) for (int(i) = (a); (i) >= (b); (i) -= (c))
#define MEM0(a) memset((a), 0, sizeof(a));
#define MEM_1(a) memset((a), -1, sizeof(a));
#define ALL(a) a.begin(), a.end()
#define SYNC                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef double db;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int, int> Pi;
typedef pair<ll, ll> Pll;
typedef pair<ld, ld> Pd;
typedef vector<int> Vi;
typedef vector<ll> Vll;
typedef vector<double> Vd;
typedef vector<Pi> VPi;
typedef vector<Pll> VPll;
typedef vector<Pd> VPd;
typedef tuple<int, int, int> iii;
typedef tuple<int, int, int, int> iiii;
typedef tuple<ll, ll, ll> LLL;
typedef vector<iii> Viii;
typedef vector<LLL> VLLL;
typedef complex<double> base;
const int MOD = 1000000007;
ll POW(ll a, ll b, ll MMM = MOD) {
  ll ret = 1;
  for (; b; b >>= 1, a = (a * a) % MMM)
    if (b & 1)
      ret = (ret * a) % MMM;
  return ret;
}
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll lcm(ll a, ll b) {
  if (a == 0 || b == 0)
    return a + b;
  return a * (b / gcd(a, b));
}
int dx[] = {0, 1, 0, -1, 1, 1, -1, -1}, dy[] = {1, 0, -1, 0, 1, -1, 1, -1};
int ddx[] = {2, 2, -2, -2, 1, 1, -1, -1}, ddy[] = {1, -1, 1, -1, 2, -2, 2, -2};

ll cnt[31][31];
int main() {
  int n;
  scanf("%d", &n);
  fup(i, 0, n - 1, 1) {
    db x;
    scanf("%lf", &x);
    ll a = (ll)round(x * 1e9);
    int t2 = 0, t5 = 0;
    while (a % 2 == 0) {
      t2++;
      a /= 2;
    }
    while (a % 5 == 0) {
      t5++;
      a /= 5;
    }
    cnt[t2][t5]++;
  }
  ll ans = 0;
  fup(i1, 0, 30, 1) fup(j1, 0, 30, 1) fup(i2, 0, 30, 1) fup(j2, 0, 30, 1) {
    if (mp(i1, j1) < mp(i2, j2) && i1 + i2 >= 18 && j1 + j2 >= 18)
      ans += cnt[i1][j1] * cnt[i2][j2];
  }
  fup(i, 9, 30, 1) fup(j, 9, 30, 1) {
    ll t = cnt[i][j];
    ans += t * (t - 1) / 2;
  }
  printf("%lld\\n", ans);
}