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;
 
//#pragma GCC optimize("Ofast")
//#pragma GCC target("sse4")
 
#define FOR(i, a, b) for(int i = (a); i < (b); ++i)
#define RFOR(i, b, a) for(int i = (b) - 1; i >= (a); --i)
 
#define SZ(a) (int)((a).size())
#define ALL(a) a.begin(), a.end()
 
typedef long long LL;
typedef pair<int, int> PII;

int lg(LL x, int p)
{
	int res = 0;
	while(x % p == 0)
	{
		res++;
		x /= p;
	}
	return res;
}

int main()
{
	ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	int n;
	cin >> n;
	map<pair<int, int>, int > cnt;
	LL ans = 0;
	while(n--)
	{
		double x;
		cin >> x;
		LL b = 1000 * 1000 * 1000;
		LL a = x * 1e9 + 0.5;
		int g = __gcd(a, b);
		a /= g;
		b /= g;
		int c = lg(a, 2) - lg(b, 2);
		int d = lg(a, 5) - lg(b, 5);
		for(auto [y, z]: cnt)
		{
			if(c + y.first >= 0 && d + y.second >= 0)
				ans += z;
		}
		cnt[{c, d}]++;
	}
	cout << ans << "\n";
	return 0;
}