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 Ruby (2.7.1) (judge verdict: Accepted)

n = gets.to_i
aa = []
memo = Array.new(41) {Array.new(21) {Array.new(10, 0)}}

n.times do
    a = gets.to_r
    s = a.denominator
    r = a.numerator

    x = (s & -s).bit_length - 1
    y = 0
    (y += 1; s /= 5) while s % 5 == 0
    z = [x, y].max

    if x > y
        y = x - y
        x = 0
    elsif x == y
        x = y = 0
    else
        x = y - x
        y = 0
    end

    x += (r & -r).bit_length - 1
    (y += 1; r /= 5) while r % 5 == 0
    
    memo[x][y][z] += 1
    aa << [x,y,z]
end

10.times do |k|
    40.times do |i|
        i = 39 - i
        20.times do |j|
            j = 19 - j
            memo[i][j][k] += memo[i+1][j][k] + memo[i][j+1][k] - memo[i+1][j+1][k]
        end
    end
end

ans = 0
aa.each do |x,y,z|
    10.times do |k|
        i = [k + z - x, 0].max
        j = [k + z - y, 0].max
        ans += memo[i][j][k]
    end
end

p (ans - memo[0][0][0]) / 2