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;
#define fi first
#define se second
#define rep(i, n) for (int i=0; i < n; i++)
#define repd(i, n) for (int i = n-1; i > -1; i--)
#define repran(i, a,b) for (int i = a; i<b;i++)
#define all(x) (x).begin(), (x).end()
#define v(T) vector<T>
#define vv(T) vector<v(T)>
typedef long long ll;
typedef pair<int, int> P;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<vi> vvi;
typedef vector<vll> vvll;

int main()
{
    int n;
    cin >> n;
    ll d= 1e9;
    vll a(n);
    vvll c(20, vll(20, 0));
    rep(i, n){
        long double x;
        cin >> x;
        a[i] = x*d + 0.5;
    }
    for (auto x : a){
        int i = 0, j = 0;
        while (x%2 == 0 && i < 19){
            i++;
            x /= 2;
        }
        while (x%5 == 0 && j < 19){
            j++;
            x/=5;
        }
        c[i][j]++;
    }
    ll ans = 0;
    rep(i, 20) rep(j, 20){
        rep(k, 20) rep(l, 20){
            if (i+k < 18 or j + l < 18) continue;
            ans += c[i][j]*c[k][l];
            if (i==k and j==l) ans -= c[i][j];
        }
    }
    ans /= 2;
    cout << ans << endl;
}