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 Java (OpenJDK 11.0.6) (judge verdict: Accepted)

import java.util.*;
import java.util.function.*;
import java.lang.*;
import java.math.*;
import java.io.*;

public class Main {
    static int div2Count(long n){
        int ans = 0;
        while(n%2 == 0){
            n /= 2;
            ans ++;
        }
        return ans;
    }
    static int div5Count(long n){
        int ans = 0;
        while(n%5 == 0){
            n /= 5;
            ans ++;
        }
        return ans;
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        BigDecimal[] A = new BigDecimal[N];
        for(int n=0; n<N; n++){
            A[n] = new BigDecimal(sc.next());
        }
        long[] L = new long[N];
        for(int n=0; n<N; n++) L[n] = A[n].multiply(new BigDecimal(1000000000)).toBigInteger().longValue();
        
        long[][] d = new long[50][50];
        for(int n=0; n<N; n++){
            d[div2Count(L[n])][div5Count(L[n])]++;
        }

        long ans = 0;

        for(int i1=0; i1<50; i1++) for(int j1=0; j1<50; j1++){
            for(int i2=0; i2<50; i2++) for(int j2=0; j2<50; j2++){
                if((i1!=i2 || j1!=j2) && i1+i2>=18 && j1+j2>=18) {
                    ans += (d[i1][j1] * d[i2][j2]);
                }
            }
        }

        for(int i=0; i<50; i++) for(int j=0; j<50; j++){
            if(i+i>=18 && j+j>=18){
                ans += d[i][j] * (d[i][j]-1);
            }
        }

        ans /= 2;
        System.out.println(ans);
    }
}