Problem:
Score : 300 points

Problem Statement

You are given N real values A_1, A_2, \ldots, A_N.
Compute the number of pairs of indices (i, j)
such that i < j and the product A_i \cdot A_j is integer.

Constraints

2 \leq N \leq 200\,000

0 < A_i < 10^4

A_i is given with at most 9 digits after the decimal.

Input

Input is given from Standard Input in the following format.

N
A_1
A_2
\vdots
A_N

Output

Print the number of pairs with integer product A_i \cdot A_j (and i < j).

Sample Input 1

5
7.5
2.4
17.000000001
17
16.000000000

Sample Output 1

3

There are 3 pairs with integer product:

7.5 \cdot 2.4 = 18

7.5 \cdot 16 = 120

17 \cdot 16 = 272

Sample Input 2

11
0.9
1
1
1.25
2.30000
5
70
0.000000001
9999.999999999
0.999999999
1.000000001

Sample Output 2

8

Solution in C++ (GCC 9.2.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);

  ll N; cin >> N;
  vector<ll> A(N, 0);
  for (ll i = 0; i < N; i++) {
    double X; cin >> X;
    A[i] = (X * 1e10 + 1) / 10;
  }

  vector<vector<ll>> cnt(50, vector<ll>(20, 0));
  // 2のべきと5のべきを数える
  for (ll i = 0; i < N; i++) {
    ll t = A[i];
    ll cnt2 = 0, cnt5 = 0;
    for (ll j = 0; j < 100; j++) {
      if (t % 2 != 0) break;
      cnt2++;
      t /= 2;
    }
    for (ll j = 0; j < 100; j++) {
      if (t % 5 != 0) break;
      cnt5++;
      t /= 5;
    }
    cnt[cnt2][cnt5]++;
  }

  ll ans = 0;
  for (ll i = 0; i < 50; i++) {
    for (ll j = 0; j < 20; j++) {
      for (ll i2 = 0; i2 < 50; i2++) {
        for (ll j2 = 0; j2 < 20; j2++) {
          if (min(i + i2, j + j2) >= 18) {
            ll temp = cnt[i][j] * cnt[i2][j2];
            if (i == i2 && j == j2) temp -= cnt[i][j];
            ans += temp;
          }
        }
      }
    }
  }
  ans /= 2;

  cout << ans << '\n';
  return 0;
}