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: Wrong Answer)

#include<iostream>                          
#include<vector>                    
 #include<bits/stdc++.h>

#define mod 998244353
#define pi 3.14159265358979
#define  PRE(x,p) cout<<setprecision(x)<<p; 
#define pb push_back
#define mp make_pair
#define f first
#define s second
#define endl "\n"
#define high INT_MAX
#define low INT_MIN
#define ll int
using namespace std;
 
void solve() 
{ 
  map<pair<ll,ll>,ll>ma;
    int n,i,t,f;
    long double x;
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin>>x;
        t=0;f=0;
        long long y = llround(x * 1e9);
        while(y%2==0)
        {
            t++;
            y/=2;
        }
        while(y%5==0)
        {
            f++;
            y/=5;
        }
        ma[mp(t,f)]++;
    }
     ll answer = 0;
    for(auto p1 : ma) {
        for(auto p2 : ma) {
    if(p1.first.first+p2.first.first >= 18 && p1.first.second+p2.first.second>= 18) 
    {
                if(p1 < p2) 
                    answer += (long long) p1.second * p2.second;
                
                else if(p1 == p2) 
                    answer += (long long) p1.second * (p1.second - 1) / 2;
                
            }
        }
    }
   cout<<answer;
}
 
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
ll t=1;
//cin>>t;
while(t--)
solve();
 
return 0;
}